101.2. Procesar Cadenas de Texto Por Medio de Filtros
101.2. Procesar Cadenas de Texto Por Medio de Filtros
101.2. Procesar Cadenas de Texto Por Medio de Filtros
Términos y utilidades
• cat
• cut
• expand
• fmt
• head
• od
• join
• nl
• paste
• pr
• sed
• sort
• split
• tail
• tr
• unexpand
• uniq
• wc
103.2.- Procesar cadenas de texto por medio de filtros
103.2.1.- Comandos básicos para mostrar archivos
cat
Muestra el contenido de un archivo de texto, ese es su uso principal. Puede enplearse
como redireccionador de lo que entra por su entrada sstandard y lo envía a su salida
standard, pero eso se verá más adelante (3.4 pipes).
Un ejemplo sería:
$ cat /etc/apt/sources.list
$ cat apuntes.html
tac
Es como cat pero al revés, es decir, muestra el archivo de atŕas hacia adelante, mostrando
las líneas del texto de la última a la primera. Lo da la vuelta como un calcetín. Se emplea
en archivos log (registro de cosas que han acontecido).
Un ejemplo sería:
$ tac /var/log/apt/history.log
head
En inglés significa cabeza o cabecera, está claro que nos mostrará el principio de un
archivo de texto, por defecto las 10 primeras lineas.
Un ejemplo sería:
$ head lista.txt -n 5
tail
En inglés significa cola, que es lo contrario de cabeza. Muestra las lineas finales, por
defecto la 10 últimas. Pero mucho ojo , las muestra en su orden correcto , no invierte
el orden como pasaba en tac. Dispone de opciones -n y -c, con significado similar
a head. Además dispone de dos opciones adicionales:
-f muestra las últmimas líneas y todas las nuevas que vayan apareciendo.
Muy útil para archivos log.
+ <nº linea> muetra las líneas a partir del número de linea indicado
Un ejemplo sería:
$ tail /var/log/apt/history.log -n
$ cat ejemplo.txt
España ha ganado el mundial de fútbol.
El equipo campeón es España.
$ wc ejemplo.txt -c
73 ejemplo.txt
$ wc ejemplo.txt -m
69 ejemplo.txt
En un caso arroja 73 (bytes) que corresponden a 69 caracteres.
nl
Numerador de lineas (numbered lines) Equivalente a cat -b. Con la opción -bt muestra
sólo las lineas que no estén en blanco. No requiere mayor explicación.
expand
Sustituye los tabuladores que aparecen en el archivo por su equivalente en espacios en
blanco. Por defecto emplea 8 espacios, con la opcion -t se puede modificar.
unexpand
Mas o menos lo contrario de expand, sustituye dos o mas espacios en el texto por
tabuladores.
$ cat ejemplo.txt
Estaba la pastora, lará lará larito.
$ hexdump ejemplo.txt
0000000 7345 6174 6162 6c20 2061 6170 7473 726f
0000010 2c61 6c20 7261 a1c3 6c20 7261 a1c3 6c20
0000020 7261 7469 2e6f 0a0a
0000028
$ hexdump ejemplo.txt -C
00000000 45 73 74 61 62 61 20 6c 61 20 70 61 73 74 6f 72 |Estaba la pastor|
00000010 61 2c 20 6c 61 72 c3 a1 20 6c 61 72 c3 a1 20 6c |a, lar.. lar.. l|
00000020 61 72 69 74 6f 2e 0a 0a |arito...|
00000028
Como se puede apreciar, permite ver la codificación interna del archivo en hexadecimal,
mostrando que está en UTF-8, donde un caracter a veces son varios bytes.
od
Abreviatura de 'octal dump' vuelca archivos a la salida standard en formato octal. Tiene
diversas opciones para hacer los volcados en otros formatos. Las opciones más comunes
son:
$ od ejemplo.txt -c
0000000 E s t a b a l a p a s t o r
0000020 a , l a r 303 241 l a r 303 241 l
0000040 a r i t o . \n \n
0000050
103.2.5.- Comandos para dividir y juntar archivos
split
Corta o trocea un archivo en trozos, de un número de líneas determinado o de un tamaño
determinado. Split como adjetivo se emplea para por ejemplo la leche cuando está
cortada, significa separar.
Se puede trocear el archivo empleando -l y el número de líneas de cada parte o -b y el
tamaño en bytes de cada parte. Pongamos un ejemplo:
$ ls parte_*
parte_aa parte_ab parte_ac parte_ad
Estos archivos pueden recomponer una copia del original usando:
cut
Se emplea en archivos de texto donde en cada linea hay campos separados por un
separador. Corta determinadas columnas del archivo y las muestra por la salida standard.
El separador de campo se espedifica con -d y -f de la posición del campo o campos que
deseamos "cortar". Vamos a ver un ejemplo con el archivo /etc/group que contiene lista de
grupos separados por ":". Vamos a cortar el primer y el tercer campo.
$ cat paises
1 España español
2 Francia francés
3 Japón japonés
4 China chino
$ cat abreviaturas
1 ESP
2 FRA
4 CHN
$ join -1 1 -2 1 paises abreviaturas
1 España español ESP
2 Francia francés FRA
4 China chino CHN
En este ejemplo hemos mezclado el archivo países con el archivo abreviaturas
de manera que si el campo primero (el número) de cada archivo era igual se
mezclaran los campos, unos a continuación de los otros. Al no disponer de
abreviatura para japón (4), este no ha salido.
sort
Ordena las lineas de un archivo, puede ser por criterios numéricos o de cadena.
Veamos un ejemplo:
$ cat letra
debajo del olivo
debajo del olivo
debajo del olivo
el sol calienta
debajo el olivo
el sol calienta
debajo del olivo el sol calienta
$ uniq letra
debajo del olivo
el sol calienta
debajo el olivo
el sol calienta
debajo del olivo el sol calienta
Con la opción -u sólo pone las líneas que no se repiten:
$ uniq letra -u
el sol calienta
debajo el olivo
el sol calienta
debajo del olivo el sol calienta
Alguno dirá ¿pero si son dos frases que no paran de repetirse? Si, pero no de
forma secuencial, consecutiva, varias veces seguidas. Ahora se entiende ¿no?
tr
Convierte caracteres del archivo original en otros siguiendo el patrón establecido. El
nombre del comando procede de "translate", traducir. Este comando sólo recoge datos de
la entrada standard, no de archivos directamente, por tanto siempre va detrás de un pipe.
Veamos un ejemplo:
Espagna
Esto puede ser útil para eliminar eñes en caso de pasar texto a formatos
que no las soportan bien.
fmt
Abreviatura de 'format', modifica el formato a determinado número de caracteres por
línea, pensado para preprocesar la impresión .Configura el texto por defecto a 75
caracteres por linea. Tiene tres opciones:
$ cat prueba
printf("Perico los palotes") ;
if else then
$ fmt prueba -u
printf("Perico los palotes") ; if else then
Es importante saber que no actúa con la entrada standard, por tanto no nos lo
encontraremos detrás de un pipe.
pr
Divide el archivo para impresión en páginas de 66 líneas y 72 caracteres de ancho. Tiene
dos opciones: