Esta es la primer publicación de la serie de coreutils, vamos a comenzar con los comandos que se utilizan para manipular el output de archivos completos, estos comandos: cat, tac y nl. Hoy sólo vamos a revisar a fondo cat, ya que es una de las herramientas más utilizadas en el día a día, espero que podamos detallarla a fondo.
Empecemos por lo más sencillo:
¿Qué es cat?
Es una herramienta que copia el contenido de un archivo y lo despliega en el «Standard Output»
Espera… ¿»Standard Output» ?
OK, si es importante definir lo que son los «Standardized streams» (input, output y error) pero eso será tema de otra publicación, de momento sólo diremos que se refiere a «imprimir en pantalla» pero esto puede redirigirse muy fácilmente, por ahora debemos quedarnos con esta definición imprecisa.
NOTA: Si quieres realizar los ejemplos con el mismo archivo que yo utilicé puedes descargarlo aquí: ejemplo-101
¿Para qué me sirve cat?
El escenario más común de cat es el de mostrar en pantalla el contenido de un archivo completo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
gabriel@gultij:~/Gultij/Coreutils/files$ cat ejemplo-101.txt Hola Mundo Usaremos este archivo para mostrar algunos comandos. algunos saltos de linea incluimos tabs y algunos espacios otro tab mas Excelente, creo que esto es suficiente |
¡Vaya! eso fue… menos sorprendente de lo que esperabas xD pero es realmente útil: si quieres revisar el contenido de un archivo sin necesidad de utilizar un editor de texto puedes mostrarlo en pantalla. Cat estará disponible en todos los sistemas Linux sin necesidad de instalar nada adicional, al contrario de vim, nano o cualquier otro editor externo.
Si te das cuenta, en el contenido de archivo es muy difícil percibir si existen espacios o tabulaciones. Para eso nos será de mucha ayuda la opción -T. Veamos como se usa.
Usar cat -T para detectar tabulaciones en el archivo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
gabriel@gultij:~/Gultij/Coreutils/files$ cat -T ejemplo-101.txt Hola Mundo Usaremos este archivo para mostrar algunos comandos. algunos saltos de linea ^Iincluimos tabs y algunos espacios^Iotro ^Itab^Imas Excelente, creo que esto es suficiente |
Podemos ver que en el documento aparece el símbolo ^I. Esto significa que el documento contiene el comando de control TAB.
¿Alguna vez les ha pasado que tienen espacios al final de una línea y no pueden darse cuenta? cat también puede ayudarnos con eso.
Usar cat -E para detectar saltos de línea en el archivo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
gabriel@gultij:~/Gultij/Coreutils/files$ cat -E ejemplo-101.txt Hola Mundo$ $ Usaremos este archivo para mostrar algunos comandos.$ $ algunos $ saltos$ de $ linea$ $ incluimos tabs $ y algunos espacios otro tab mas$ $ Excelente, creo que esto es suficiente$ $ $ $ |
¡Woah, no pude ver eso antes! Si se dan cuenta aparece el símbolo $ al final de cada renglón mostrando dónde aparece el salto de línea; hay algunas líneas que tienen varios espacios antes del salto de línea. Después, en otra publicación, vamos a revisar cómo podemos eliminarlos fácilemente, pero por ahora con cat podemos detectarlo.
Todavía cat tiene más trucos bajo la manga, veamos el siguiente ejemplo y ya lo explicaremos.
Usar cat -v para detectar caracteres de control en el archivo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
gabriel@gultij:~/Gultij/Coreutils/files$ cat -v ejemplo-101.txt Hola Mundo Usaremos este archivo para mostrar algunos comandos. algunos saltos de linea incluimos tabs y algunos espacios otro tab mas Excelente, creo que esto es suficiente ^L^L ^L ^L^M^K^[^H^G |
¿ Ves los símbolos del final ? Yep, siempre han estado ahí, sólo que son «non-printable» characters, son caracteres de control que no se muestran en el documento.
Algunos comandos de control
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
000 0000 000 0 00 NUL ^@ \0 Null character 000 0001 001 1 01 SOH ^A Start of Header 000 0010 002 2 02 STX ^B Start of Text 000 0011 003 3 03 ETX ^C End of Text 000 0100 004 4 04 EOT ^D End of Transmission 000 0101 005 5 05 ENQ ^E Enquiry 000 0110 006 6 06 ACK ^F Acknowledgment 000 0111 007 7 07 BEL ^G \a Bell 000 1000 010 8 08 BS ^H \b Backspace[d][e] 000 1001 011 9 09 HT ^I \t Horizontal Tab[f] 000 1010 012 10 0A LF ^J \n Line feed 000 1011 013 11 0B VT ^K \v Vertical Tab 000 1100 014 12 0C FF ^L \f Form feed 000 1101 015 13 0D CR ^M \r Carriage return |
Puedes realizar combinaciones de estos comando cosas como:
cat -vE
cat -vT
cat -vET
cat –help para la lista completa de opciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
gabriel@gultij:~/Gultij/Coreutils/files$ cat --help Usage: cat [OPTION]... [FILE]... Concatenate FILE(s) to standard output. With no FILE, or when FILE is -, read standard input. -A, --show-all equivalent to -vET -b, --number-nonblank number nonempty output lines, overrides -n -e equivalent to -vE -E, --show-ends display $ at end of each line -n, --number number all output lines -s, --squeeze-blank suppress repeated empty output lines -t equivalent to -vT -T, --show-tabs display TAB characters as ^I -u (ignored) -v, --show-nonprinting use ^ and M- notation, except for LFD and TAB --help display this help and exit --version output version information and exit Examples: cat f - g Output f's contents, then standard input, then g's contents. cat Copy standard input to standard output. GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Full documentation at: <http://www.gnu.org/software/coreutils/cat> or available locally via: info '(coreutils) cat invocation' |
¡Hey, no explicaste todas las opciones! :(
Está bien, explicaré las que faltan brevemente por que esto ya se alargo más de lo que esperaba.
cat -n para enumerar todas las líneas del documento.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
gabriel@gultij:~/Gultij/Coreutils/files$ cat -n ejemplo-101.txt 1 Hola Mundo 2 3 Usaremos este archivo para mostrar algunos comandos. 4 5 algunos 6 saltos 7 de 8 linea 9 10 incluimos tabs 11 y algunos espacios otro tab mas 12 13 Excelente, creo que esto es suficiente 14 15 16 |
cat -b para enumerar sólo para las líneas que tienen contenido (omite las líneas vacias en la numeración)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
gabriel@gultij:~/Gultij/Coreutils/files$ cat -b ejemplo-101.txt 1 Hola Mundo 2 Usaremos este archivo para mostrar algunos comandos. 3 algunos 4 saltos 5 de 6 linea 7 incluimos tabs 8 y algunos espacios otro tab mas 9 Excelente, creo que esto es suficiente 10 11 12 |
Y bien, con esto terminaremos por hoy. La mejor forma de aprender es practicando. Desarrolla tus propios ejemplos y comparte en los comentarios tu preguntas.
La próxima semana espero poder cumplir con las fechas para otro artículo. Honestamente espero que no sea tan largo como este, pero de verdad espero que lo que hacemos aquí les sea de mucha utilidad a todos. ¡Gurús! Si tengo algún error recuerden que sólo soy un humano nivel 16, cualquier corrección o espacio para mejorar será siempre bien recibido.
Wow! superbien explicado!