cat: no es un gato, es un concatenador

diciembre 07, 2019 , 0 Comments

cachorro de gato

Bien, el programa cat es probablemente uno de los que más se usan en un shell de Linux. Es muy básico, pero también muy práctico. A veces las herramientas más simples y básicas suelen ser también las más poderosas en cuanto a utilidad. Su nombre proviene de conCATenate, de ahí el título que he decidido ponerle a este artículo donde trataré de explicarlo para aquellos que aún no lo conozcan.

Básicamente el concatenador va más allá de lo que su propio nombre indica, no solo concatena, también puede mostrar el contenido de un archivo de texto, y combinado con las tuberías puede ser mucho más potente aún y servir para múltiples utilidades. Y todas esas utilidades básicas las resumiré en este artículo con ejemplos prácticos, para que puedas verlo de una forma más intuitiva…

Para ver simplemente el contenido de un archivo, puedes usar el siguiente comando:


cat nombre_archivo

cat /etc/passwd

 

Eso te lo va a mostrar en pantalla. En caso de ser un archivo cifrado o un binario, pues verás que te muestra caracteres o símbolos raros sin mucho sentido para ti.

Incluso puedes ver el contenido de varios archivos concatenados en la salida, de ahí su nombre:


cat nombre_archivo

cat /etc/passwd /etc/passwd- /etc/hosts

Otra posibilidad alternativa a touch es usar cat para crear un archivo:


cat > ejemplo.txt

Esto abre de forma interactiva una especie de editor en el que podrás introducir todo el texto que quieras que tenga ese archivo que has creado, o dejarlo vacío. Cuando hayas terminado de introducir lo que necesitas, solo pulsa Ctrl+D para salir.

En el caso de que el contenido de un archivo pueda ser largo y prefieres facilitar su navegación y lectura, puedes usar less y more para ello:


cat manual.txt | more
cat manual.txt | less

Eso facilitará mucho la navegación por el texto mostrado. Por cierto, para salir pulsa Q como harías con man, etc.

Muy interesante para desarrolladores es mostrar el número de línea. Si quieres que cat numere las líneas del contenido de un archivo usa la opción n. Eso no alterará el contenido del archivo, solo mostrará los números en la salida:


cat -n codigo.c 

Por cierto, si quieres guardar el texto numerado tal cual se muestra en la pantalla, podrías hacerlo usando redirecciones. Por ejemplo:

Para ver simplemente el contenido de un archivo, puedes usar el siguiente comando:


cat -n codico.c > numerado.txt

Recuerda que con > lo que haces es sustituir el contenido de numerado.txt en este caso. Es decir, que si no existía se crea con el contenido, pero si ya existía se borrará lo que había antes en él y se guarda el nuevo contenido. Para que no se borre lo anterior y se agregue el contenido al final, usa >> en vez de >.

Lo malo de la opción -n es que numera todas las líneas. Pero si quieres evitar que se numeren aquellas que están vacías, puedes usar -b:


cat -b /etc/hosts

Por supuesto, con todas las opciones puedes usar las tuberías y redirecciones para canalizar el contenido, etc. Y te aconsejo que leas el man de cat para saber más. Hay opciones como -e para reemplazar el EoL (End of Line) por $, -T para tabulaciones, -s para suprimir líneas repetidas vacías, etc.

Hasta ahora simplemente se mostraban los caracteres visibles, pero también existen muchos otros invisibles que no se ven. Para mostrarlos usa el flag v:


cat -v demo.odt

Lo puedes usar para borrar el contenido de archivos y dejarlos vacíos. Para eso puedes usar el dispositivo especial /dev/null de esta forma:


cat /dev/null | demo.txt

En este caso el contenido de /dev/null es nulo y eso lo redirige mediante la tubería hacia el archivo de texto demo.txt. Es decir, que demo.txt se llena con contenido nulo, o dicho de otro modo, se borra.

Puedes usar también esto otro para poder introducir secuencias hasta que escribas EOL y se cierre, es decir, se abre como una especie de editor en el que puedes escribir lo que quieras. Evidentemente, así sin más no tiene utilidad, pero por ejemplo, puedes escribir todo y guardarlo en un archivo:


cat << EOL > hola

Básicamente << le dice al intérprete de comandos que vas a ingresar cadenas hasta ingresar una etiqueta, que en este caso es EOL, que indicará que has llegado al final. Puedes sustituir EOL por STOP, o lo que quieras.

Y si estás trabajando con sistemas heterogéneos, habrás notado que los archivos de texto del mundo DOS/Windows usan otros caracteres de fin de línea que en UNIX/Linux, por lo que puede que el texto se desajuste al intentar ver el archivo en uno u otro sistema. En los *nix se usa LF para finalizar la línea, mientras que en DOS/Windows se usa CR/LF. Para poder solucionar esto tienes dos herramientas que son dos2unix para convertir de DOS/Windows a Unix y unix2dos para lo inverso. Pero si no las quieres instalar, puedes usar cat para ello así:


cat dos.txt | sed "s/^M\{1,\}$//" | sed "$ s/^Z//" > archivo_convertido.txt

cat unix.txt | sed "s/$/^M/" | sed "$ s/$/^Z/" > archivo_convertido.txt

Como puedes comprobar, las utilidades de cat son muchísimas. A pesar de su simplicidad permite hacer multitud de cosas. Además, todo lo que has visto aquí no es lo único. Puedes imaginar muchas otras utilidades y cosas nuevas para las que te podría servir. Recuerda leer más en el manual:


man cat

 


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.