cat: no es un gato, es un concatenador
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