Mostrar contenido de un fichero

A medida que trabajamos con ficheros en una terminal, el nombre del fichero, su ubicación o su extensión puede no ser información suficiente para saber si se trata del fichero que buscamos, e interesarnos mostrar el contenido de un fichero rápidamente, para saber si es el que buscamos o simplemente porque queremos ver su contenido.

Mostrar contenido (cat)

Para ello, se suele utilizar el comando cat (conCATenate files), que técnicamente se considera un comando que concatena (une) la salida de uno o varios ficheros. Esto, dicho de otra forma, es que cat no se limita a mostrar el contenido de un solo fichero (como suele usarse habitualmente), sino que puede hacer cosas aún más potentes.

Por ejemplo, el caso más básico sería el siguiente:

$ cat /etc/timezone

Atlantic/Canary

En este ejemplo, mostraríamos el contenido del fichero timezone ubicado en la ruta /etc. Se trata de un fichero que guarda la zona horaria del sistema. De esta forma, podríamos consultarla rápidamente, sin tener que abrirla con un editor. Sin embargo, también podríamos hacer lo siguiente para mostrar el contenido de varios ficheros:

$ ls /etc/deb*
/etc/debconf.conf  /etc/debian_version

$ cat /etc/deb*

Con el comando cat /etc/deb* indicamos que queremos que nos muestre el contenido de todos los fichero que comiencen por deb y estén situados en /etc (en este caso 2 ficheros) y no tendríamos que hacerlo individualmente, uno por uno.

El comando cat tiene algunos parámetros interesantes:

Parám. Descripción
-s Suprime espacios consecutivos repetidos y los convierte en uno solo.
-n Numera las líneas, a la izquierda.
-b Numera solo las líneas no vacías.

Mejora del cat (bat)

Existe una alternativa muy interesante al comando cat, llamada bat y desarrollada en Rust. Dicho comando mejora sustancialmente al comando cat, utilizando características como resaltado de sintaxis en color para lenguajes de programación, soporte para cambios de git, paginación (ver más adelante) automática, etc...

Para instalarla, necesitaremos tener en nuestro sistema Rust instalado, y utilizar su gestor de paquetes cargo. Con él, podremos escribir cargo install bat y lo tendremos disponible. Las últimas versiones de Debian, ya lo incorporan para instalar con un simple sudo apt install bat.

La salida del comando bat de un fichero Javascript sería similar a la siguiente:

bat: alternative to cat (Linux)

El comando bat dispone de varios parámetros interesantes:

Parám. Descripción
--list-languages Muestra los lenguajes soportado en el resaltado de sintaxis.
-l <lang> Especifica el lenguaje a resaltar (C++, javascript, css, rust, ...)
--list-themes Muestra los temas de resaltado de sintaxis disponibles en bat.
--theme <theme> Especifica el tema de resaltado a utilizar.
-p Muestra un formato plano, por si queremos desactivar temporalmente el resaltado.
-n Numera las líneas, pero no utiliza otras decoraciones como los bordes.
-A Muestra los carácteres ocultos (espacios, tabuladores, nueva línea, etc...)
-r <ini>:<fin> Muestra las líneas ini a fin del fichero. Por ejemplo: bat -r 4:10 file.js

Nota: Ejecutando bat --list-themes veremos la lista de temas disponibles para el resaltado de sintaxis. Puedes usar uno de ellos escribiendo bat --theme base16 (por ejemplo). También puedes aprovechar para incluirlo en un alias de la shell y que se ejecute al hacer un cat.

Mostrar contenido al revés (tac)

Si el comando cat nos muestra el contenido de un fichero de arriba a abajo, es decir, desde su primera línea a su última línea, el comando tac (cat al revés) hace justo lo contrario, mostrar el contenido de un fichero de abajo a arriba, desde su última línea a la primera.

$ tac textfile.txt

Esta es la última línea.
Esta es la segunda línea.
Esta es la primera línea.

Otra opción posible, aunque menos común, es que si buscamos mostrar el contenido de un archivo al revés, pero en lugar de abajo a arriba, de derecha a izquierda, podemos utilizar el comando rev, que invierte el orden horizontal:

$ cat textfile.txt | rev

.aeníl aremirp al se atsE
.aeníl adnuges al se atsE
.aeníl amitlú al se atsE

Paginar contenido (more)

Pero en algunos casos, nos encontraremos que el contenido de un archivo es demasiado extenso y no nos da tiempo de leer su contenido antes de que siga avanzando en el contenido. La mejor forma de solucionar ese problema es utilizar un paginador.

Se trata de un comando que, una vez detecta que la pantalla está llena, hace una pausa, y no continua hasta que el usuario pulse una tecla. De esta forma, puede ir leyendo poco a poco los contenidos mostrados en pantalla. El paginador más conocido se llama more y se utiliza de la siguiente forma:

$ cat largetextfile.txt | more

En este caso estamos utilizando un pipe | que obtiene la salida por pantalla del primer comando y se lo envía al segundo, que es el paginador.

De esta forma, el paginador hace una pausa cuando se llena la pantalla, mostrando una línea more al final de la pantalla y esperando a que el usuario pulse una tecla. Dependiendo de la tecla que se pulse, el paginador more hará una acción concreta:

Tecla Descripción
ENTER Avanza una sola línea.
SPACE Avanza una página.
= Muestra la línea donde se encuentra el paginador.
/word Busca la palabra word en el texto y va hasta ella.
n Vuelve a buscar la última palabra buscada.
Q Sale del paginador y vuelve a la terminal.

Sin embargo, el more es bastante limitado en cuanto a ciertas acciones.

Mejora de paginación (less)

Muchas veces el paginador more se nos queda corto por varias razones. Por ejemplo, una vez pulsado enter para avanzar, no podemos volver hacia atrás. Existen otros paginadores como less que son un poco más versátiles en este sentido, permitiendo utilizar los cursores y o las teclas RePág o AvPág para subir o bajar en el texto más facilmente.

El comando most es otro paginador que además muestra una barra inferior y resaltado de colores para hacer la lectura un poco más sencilla. Estos paginadores se pueden instalar en el sistema utilizando sudo apt install less most.

Nota: Tanto more, como less como most pueden utilizarse directamente como alternativa de cat. Es decir, ejecutar less largetextfile.txt para mostrar el contenido paginado.

Soporte de compresión

En Linux, es muy habitual trabajar con ficheros de texto plano, aunque en el caso de registros o logs, cuando son muy extensos suelen terminar ocupando mucho espacio. Para evitarlo, se suelen comprimir utilizando formatos muy comunes en Linux como .gz, .bz2 o .xz, de modo que podríamos tener los ficheros de texto originales access.log o los ficheros comprimidos, por ejemplo access.log.gz.

Los comandos cat y less tienen unas versiones alternativas que permiten realizar su finalidad (mostrar contenido o paginar) sobre archivos de texto comprimidos. De esta forma, nos ahorramos tener que descomprimir el fichero, visualizar su contenido y volverlo a comprimir, ya que estos comandos lo hacen todo sobre el archivo comprimido, sin alterarlo.

Los comandos son los siguientes:

Comando Compresor Finalidad
zcat gzip Muestra el contenido de un fichero de texto comprimido .gz.
zless gzip Pagina el contenido de un fichero de texto comprimido .gz.
bzcat bzip2 Muestra el contenido de un fichero de texto comprimido .bz2.
bzless bzip2 Pagina el contenido de un fichero de texto comprimido .bz2.
xzcat xz Muestra el contenido de un fichero de texto comprimido .xz.
xzless xz Pagina el contenido de un fichero de texto comprimido .xz.

Si quieres más información sobre formatos de compresión, echa un vistazo al artículo de compresores de Linux.

Manz
Publicado por Manz

Docente, divulgador informático y freelance. Autor de Emezeta.com, es profesor en la Universidad de La Laguna y dirige el curso de Programación web FullStack y Diseño web FrontEnd de EOI en Tenerife (Canarias). En sus ratos libres, busca GIF de gatos en Internet.