103.4. Flujos, Tuberías, y Redireccionamiento de Salida
103.4. Flujos, Tuberías, y Redireccionamiento de Salida
103.4. Flujos, Tuberías, y Redireccionamiento de Salida
Los flujos, la redirección, y los pipes son algunas de las herramientas más potentes de la
línea de comandos. Linux trata lo que entra y lo que sale de los programas como un flujo,
que es una entidad de datos que se pueden manipular. Generalmente, la entrada viene del
teclado y la salida va hacia la pantalla. No obstante, puede redirigir estos flujos de entrada
y salida para que vengan de otras fuentes (como ficheros) o se dirijan a éstas. De igual
manera, pueden canalizar (pipe) la salida de un programa hacia otro programa. Estos
recursos pueden suponer una magnifica herramienta de conexión entre varios programas.
Normalmente, los mensajes de error se envían al mismo dispositivo de salida que la salida
estándar, por lo que cuesta diferenciarlos, aunque algunos se pueden redirigir
independientemente, lo cual puede resultar muy útil. Por ejemplo, puede redirigir el error
estándar a un fichero a la par que la salida estándar se sigue mostrando en la pantalla, de
manera que puede interactuar con el programa y estudiar los mensajes de error mucho
más adelante.
Internamente, los programas tratan estos flujos como simples ficheros de datos; los abren,
leen los ficheros o escriben en ellos y los cierran cuando terminan. Dicho de otro modo, los
ficheros normales son flujos desde el punto de vista de los programas. Lo que ocurre es
que estos flujos son los que se utilizan para interactuar con los usuarios.
2> Redirecciona el error estándar, que es la pantalla. Crea un nuevo fichero que
contiene el error estándar. Si el fichero existe lo sobrescribe.
&> Redirecciona tanto la salida estándar como el error estándar. Si el fichero existe lo
sobrescribe
Ejemplo:
La orden ls visualiza toda la información del directorio sin parar, por lo que algunas veces
no llegamos a ver el contenido de todo el directorio. Como la orden ls no posee ninguna
opción para paginar esta información, deberemos combinar la orden ls y la orden more,
(que es la que pagina), para ello escribiremos: $ ls | more
NOTA: Podemos utilizar el número de | que deseemos e incluso hacer que el resultado
final se almacene en un fichero.
FUNCIÓN: Visualiza las líneas de los ficheros indicados que contengan la cadena
indicada.
OPCIONES:
Hasta el momento la cadena a buscar era una cadena fija, es decir, buscábamos los
caracteres especificados. Pero con estos comandos también podemos buscar cadenas que
sean expresiones regulares.
La primera diferencia que existe entre estos 3 comandos es que fgrep, solo puede buscar
cadenas fijas, en cambio egrep y grep, pueden buscar expresiones regulares. En caso de
utilizar expresiones, es conveniente encerrar estas, entre apóstrofes (´).
Los caracteres, (metacaracteres), que podemos utilizar para definir una expresión regular
son los siguientes:
. Indica que en dicha posición puede existir cualquier carácter con uno de longitud.
^ Indica que la cadena se va a buscar al comienzo de la línea. Este carácter se coloca
antes de la cadena a buscar.
$ Indica que la cadena a buscar se encuentra al final de la línea. El $ se coloca
después de la cadena a buscar.
[] Dentro de los corchetes indicaremos:
En caso de utilizar <intro>, en la nueva línea se visualizará el símbolo <, que significa que
el comando no ha finalizado, en este momento teclearemos la 2ª cadena a buscar,
cerraremos el apóstrofe y escribiremos el nombre del fichero.
COMANDO: cut
FUNCIÓN: Toma de los ficheros indicados, las columnas o los campos indicados.
OPCIONES:
c Tras esta opción, indicaremos los números de las columnas que queramos elegir. Los
números de las columnas se pueden indicar separándolos por comas ó grupos de
columnas separando las columnas mediante guiones. Cada carácter es una columna.
f Tras esta opción, indicaremos los números de campos, ( de forma similar a las
columnas ). Hay que tener en cuenta, que el separador de campo por defecto es el
tabulador.
d Tras esta opción indicaremos el carácter que deseamos sea el separador de campos.
COMANDO: paste
OPCIONES:
Para conocer los caracteres, palabras y líneas de los ficheros utilizaremos el comando wc.
COMANDO: wc
OPCIONES:
l Cuenta el nº de líneas
w Cuenta el nº de palabras
c Cuenta el nº de caracteres
Ejemplo: $ wc aeg.txt
Visualiza el nº de líneas, de palabras, y de caracteres del
fichero aeg.txt.
$ wc -c aeg.txt
Visualiza solo, el nº de caracteres del fichero aeg.txt
$ wc aeg1.txt aeg2.txt
Visualiza 3 líneas; en la primera línea, visualiza el nº de líneas, palabras
y caracteres del fichero aeg1.txt, en la 2ª línea la misma información pero del
fichero aeg2.txt, y en la 3ª línea el total de líneas, palabras y caracteres de los 2 ficheros.
COMANDO: sort
FORMATO: sort [-opciones] ficheros
OPCIONES:
o Tras esta opción escribiremos el nombre del fichero en el cual se grabará el fichero
ordenado.
r Ordena de mayor a menor.
t Tras esta opción indicaremos el carácter que hemos considerado como separador
de campos. El separador de campos por defecto es el espacio.
g Trata los números como tales.
+n1 –n2 Si en lugar de tomar como campo a ordenar toda la línea, queremos hacerlo
por un campo en particular, tenemos que especificarlo indicando +n1 indica los campos a
saltar y -n2 indica a partir de que campo se ignora la línea.
$sort -r aeg.txt
Ordena de mayor a menor el contenido del fichero aeg.txt.
$sort +1 -3 aeg.txt
Ordena el contenido del fichero aeg.txt tomando para ordenar los campos
1 y 2 sabiendo que el separador de campos sea el espacio.
OPCIONES:
+n1 –n2 Si en lugar de tomar como campo a ordenar toda la línea, queremos hacerlo
por un campo en particular, tenemos que especificarlo indicando +n1 indica los campos a
saltar y -n2 indica a partir de que campo se ignora la línea.
Ordena tomando los contenidos de los 2 ficheros y visualiza una única salida común, es
decir, no ordena primero el contenido del aeg11.txt y luego el contenido del aeg12.txt.
$sort -r aeg.txt
$sort +1 -3 aeg.txt
Ordena el contenido del fichero aeg.txt tomando para ordenar los campos 1 y 2 sabiendo
que el separador de campos sea el espacio.