Típicamente utilizamos el comando cat para volcar archivos por salida estándar (visualizar rápidamente un archivo de texto plano por pantalla), o tal vez concatenar dos o más archivos en uno. Sin embargo, cat tiene algunas opciones interesantes, tal vez poco conocidas o utilizadas. Veamos algunos usos especiales de cat que deberían ser conocidos por todo SysAdmin que se precie.



cat es uno de los utilitarios o comandos esenciales y básicos de todo sistema operativo de la familia Unix, y es provisto en GNU/Linux por el paquete coreutils de GNU. Comúnmente se utiliza para volcar un archivo por salida estándar (en lugar de more o less, visores más avanzados que soportan paginado y desplazamiento):

emi@hal9000:~$ cat /usr/share/geany/templates/files/file.php
<?php
{fileheader}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<title>{untitled}</title>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<meta name="generator" content="{geanyversion}" />
</head>

<body>
	
</body>

</html>

O también para concatenar (unir) dos o más archivos en uno nuevo:

$ cat archivo1 archivo2 archivo3 > archivo_nuevo

Veamos algunos usos interesantes de cat que deberían ser conocidos por todo SysAdmin que se precie.

Visualizar números de línea

cat permite agregar los números de línea a través de la opción -n:

emi@hal9000:~$ cat -n /usr/share/geany/templates/files/file.php
     1	<?php
     2	{fileheader}
     3	?>
     4	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     5		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     6	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
     7	
     8	<head>
     9		<title>{untitled}</title>
    10		<meta http-equiv="content-type" content="text/html;charset=utf-8" />
    11		<meta name="generator" content="{geanyversion}" />
    12	</head>
    13	
    14	<body>
    15		
    16	</body>
    17	
    18	</html>

Esta funcionalidad tiene algunos usos colaterales, como por ejemplo recuperar o visualizar únicamente una linea específica de un archivo (algo que puede realizarse fácilmente con sed):

emi@hal9000:~$ cat -n /usr/share/geany/templates/files/file.php | grep ' 5' | cut -f2-
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

A su vez, la opción -b permite omitir as líneas en blanco en la numeración:

emi@hal9000:~$ cat -b /usr/share/geany/templates/files/file.php
     1	<?php
     2	{fileheader}
     3	?>
     4	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     5		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     6	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

     7	<head>
     8		<title>{untitled}</title>
     9		<meta http-equiv="content-type" content="text/html;charset=utf-8" />
    10		<meta name="generator" content="{geanyversion}" />
    11	</head>

    12	<body>
    13		
    14	</body>

    15	</html>

Visualizar caracteres de control

Existen diversas opciones para visualizar caracteres de control como tabs (-t o -vT), fin de línea (-e o -vE) y el resto de caracteres no imprimibles (-v).

También se dispone de la opción -A para mostrar todos (equivalente a -vET):

emi@hal9000:~$ cat -A /usr/share/geany/templates/files/file.php
<?php$
{fileheader}$
?>$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"$
^I"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">$
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">$
$
<head>$
^I<title>{untitled}</title>$
^I<meta http-equiv="content-type" content="text/html;charset=utf-8" />$
^I<meta name="generator" content="{geanyversion}" />$
</head>$
$
<body>$
^I$
</body>$
$
</html>$

Los tabs se reemplazan por la secuencia de caracteres ^I, mientras que los fin de línea con $.

Suprimir líneas en blanco repetidas

La opción -s permite omitir las líneas en blanco repetidas en la salida. Por ejemplo:

emi@hal9000:~$ echo -e "hola \n\n\n\nchau" | cat
hola 



chau
emi@hal9000:~$ echo -e "hola \n\n\n\nchau" | cat -s
hola 

chau

Finalmente, vale saber que el paquete coreutils cuenta con el comando tac equivalente, el cual permite imprimir líneas en orden reverso (no a nivel línea sino a nivel archivo, desde la última línea a la primera).


Tal vez pueda interesarte


Compartí este artículo