Coreutils-02-wp

Coreutils cat: Output de archivos completos (parte 1)

Coreutils - Output de archivos completos, comenzaremos con cat

Coreutils – Output de archivos completos, comenzaremos con cat

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»

Coreutils cat - Cheatsheet

Coreutils cat – Cheatsheet

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.

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.

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.

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.

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

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

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.

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)

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.

Esta entrada fue publicada en coreutils el por .

Acerca de Gabriel Covarrubias

Soy ingeniero en C4 Technologies, me uní al Gulij en 2013 y ya no sé cómo salir aquí xD, me gusta salir con mi perro Max que es una celebridad en redes sociales, uso Debian después de recorrer 416,000 distros diferentes a lo largo de 11 años .... y dice mi esposa que debo decir que soy felizmente casado :P.

Un pensamiento en “Coreutils cat: Output de archivos completos (parte 1)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *