LPIC-1 103.2: procesar secuencias de texto usando filtros
Recupero la serie LPIC para tratar el tema 103.2 de estas certificaciones tan importantes en la industria para demostrar tus conocimientos sobre administración de sistemas GNU/Linux. En esta ocasión, el tema hace referencia a una serie de herramientas con las que se puede procesar secuencias de texto usando filtros. Por eso, en los exámenes LPIC-1 deberás demostrar que eres capaz de aplicar estos filtros a las cadenas de texto.
Dicho de otro modo, se pretenden medir tus competencias básicas sobre enviar ficheros de texto y salidas con cadenas de texto a través de utilidades para filtrar dicho texto, con el objetivo de modificar la salida usando comandos estándar de UNIX que se pueden encontrar en el paquete textutils de GNU.
ÍNDICE:
Herramientas que debes dominar
Estas son las herramientas esenciales que puedes usar para esta tarea:
bzcat
Ya sabes que puedes comprimir y descomprimir ficheros de texto con herramientas como bzip2. Por ejemplo:
bzip2 nombre.txt bzip2 -d nombre.txt.bz2
Pero si lo que quieres es descomprimir y que directamente se muestre el texto en la salida estándar (stdout), puedes usar lo siguiente:
bzcat -d nombre.txt.bz2
Me gustaría decir que zcat hace lo mismo en el caso de ficheros comprimidos con gzip, lrzcat haría lo mismo para ficheros comprimidos con lrzcat o lrzip, y xzcat para los comprimidos de xz. Por ejemplo:
xzcat nombre.txt.xz zcat nombre.txt.gz
cat
Probablemente una de las herramientas más usadas y prácticas de todas. El concatenador puede servir para miles de utilidades. Pero básicamente debes saber que sirve para concatenar ficheros de texto y mostrar el contenido por la salida estándar (stdout). Algunos ejemplos son:
#Mostrar el contenido de un fichero de texto: cat nombre.txt #Mostrar el contenido de un fichero seguido de otro por la salida estándar: cat nombre1.txt nombre2.txt #Muestra el contenido de un fichero de texto numerando las líneas y solo numerando las líneas no vacías respectivamente: cat -n nombre.txt cat -b nombre.txt #Añadir el contenido de un fichero a otro fichero (sobrescribe) cat nombre1.txt > nombre2.txt #Añadir el contenido de un fichero a otro al final (no sobrescribe) cat nombre1.txt >> nombre2.txt #Puedes hacer varias combinaciones, por ejemplo, añadir una línea de texto y el contenido de nombre1 en nombre2 a la vez echo "Soy una linea para añadir al inicio" | cat - nombre1.txt > nombre2.txt
cut vs paste
Estos comandos, como su propio nombre indica, puede cortar y pegar texto. Tienen muchas utilidades, por ejemplo:
#Cortar solo el texto de un fichero con las cadenas de texto separadas por espacios de la primera línea cut -d " " -f 1 nombre.txt #Lo mismo, pero separa cadenas cuando se encuentra con un - en vez de un espacio y se incluye el contenido de la tercera línea también cut -d "-" -f 1,3 nombre.txt #Saca los primeros 10 caracteres de un fichero de texto cut -c 1-10 nombre.txt #Pegar el contenido en la stdout de dos ficheros de texto separados por espacios en dos columnas paste nombre1.txt nombre2.txt #Lo mismo al anterior, pero separar usando : paste -d: nombre1.txt nombre2.txt
Recuerda que puedes combinarlos como quieras, además, en vez de usar espacios, guiones y dos puntos como separadores, puedes usar el carácter que quieras…
less vs more
El filtro more permite mostrar la salida de un fichero de texto largo de una forma más controlada, para poder avanzar a través del texto paginado y no tener que hacer scroll en la pantalla. El comando less es más completo, permitiendo navegar libremente por el contenido mostrado. En principio, te pueden parecer similares al concatenador, pero no son iguales.
#Mostrar el contenido de texto paginado con more (puedes pasar usando la tecla espacio) more nombre.txt #Mostrar el contenido de texto paginado con less (puedes navegar usando las flechas abajo y arriba) less nombre.txt
Para salir, recuerda que puedes pulsar la tecla q.
De igual forma que haces con man, de hecho, éste usa less. De hecho, si quieres, puedes modificar el «pager» que usa la herramienta man en los ficheros de configuración para que haga uso de cat, more, o lo que quieras, aunque esto no es demasiado práctico en la mayoría de casos.
md5sum, sha256sum, y sha512sum
Estas herramientas se usan para calcular el hash MD5, SHA256 y SHA512 respectivamente, y también para comprobar la suma y verificar que el fichero que se está comprobando no ha sido alterado. Muy práctico para comprobar que un binario no ha sido modificado, que una imagen no está corrupta, etc. Algunos ejemplos son:
#Mostrar el hash de un fichero md5sum nombre.txt md5sum --tag nombre.txt #Calcular el hash de varios ficheros y luego comprobarlo md5sum nombre1.txt nombre2.txt nombre3.txt >> sumas md5sum --check sumas
Yo he usdado ejemplos con ficheros txt, pero pueden ser de cualquier tipo. Las herramientas sha256sum y sha512sum funcionan igual…
nl
Muestra el contenido de los ficheros con el número de línea con nl. Por ejemplo:
#Mostrar las líneas con contenido numeradas nl nombre.txt #Mostrar las líneas del contenido de un fichero, pero numerar también las que están vacías nl -b a nombre.txt #Mostrar los números de líneas con un incremento de 3 en 3 nl -i 3 nombre.txt #Personalizar el separador entre el número y la línea, por ejemplo, usar :: como separador nl -s :: nombre.txt #Para más info, recuerda (por ejemplo, la opción -l contará las líneas vacías como una): man nl
wc
Con esta herramienta podrás contar el número de líneas de un fichero. Por ejemplo:
#Cuenta el número de lineas de este fichero wc -l nombre.txt #Filtrar solo las líneas que quieres contar mediante awk para que solo muestre el número wc -l nombre.txt | awk '{print $1}'
head vs tail
Con head muestra las primeras 10 líneas de un fichero o las que le indiques. Con tail lo mismo, pero para las últimas líneas. Por ejemplo:
#Mostrar 10 primeras líneas head nombre.txt #Mostrar solo las 5 primeras head -n 5 nombre.txt #Mostrar las últimas 10 líneas tail nombre.txt #Mostrar las últimas 5 tail -5 nombre.txt
od
Su nombre proviene de Octal Dump, y sirve para mostrar por stdout byte a byte el contenido de un fichero. A pesar de su nombre, también puede mostrar en hexadecimal, caracteres visibles, etc. Por ejemplo:
#Mostrar el contenido del fichero en bytes od nombre.txt #Mostrar el contenido carácter a carácter od -c nombre.txt #Verlo en hexadecimal oc -ch nombre.txt
sed
Es un editor de texto no interactivo. Sus capacidades son muy amplias, pero también resulta complejo en cuanto a opciones. Por eso, te recomiendo que mires el manual. No obstante, aquí tienes algunos ejemplos:
#Sustituir palabra hola por azul marino en un fichero de texto sed 's/hola/azul marino/' nombre.txt #Se puede limitar el número de líneas sobre las que se pretende actuar a la línea 2 y 3 solo sed '2,3s/hola/azul marino/' nombre.txt #O desde la línea 3 hasta el final sed '3,$s/hola/azul marino/' nombre.txt #Sustituir al vuelo la palabra sitio por web de la stdin y mostrarlo por stdout echo "Hola, esto es un mensaje del sitio" | sed 's/sitio/web/' #En este caso se sustituyen varias palabras y en vez de usar un nombre en el directorio actual uso un path sed -e 's/Hello/Hey/; s/Soledad/Nat/' /home/isaac/prueba #También puedes guardar los comandos de modificación del texto todos en un fichero de texto (hacer), cada uno en una línea y luego usar sed para ejecutarlos todos en un lote sed -f hacer nombre.txt
sort
El comando sort se usa para ordenar líneas de texto a partir de varios criterios:
#Ordenar en orden alfabético las líneas de un fichero de texto sort nombre.txt #Ordenar en orden alfabético, pero usando el segundo carácter de la línea como referencia sort -k 2 nombre.txt #Ordena por valor numérico sort -n nombre.txt #Ordena el valor a la inversa, es decir, de mayor a menor sort -nr nombre.txt #Ordena las líneas alfabéticamente, los pasa a uniq para que pueda contar las líneas iguales y luego la salida de uniq la pasa a la entrada de sort nuevamente mediante la tubería para mostrar las líneas más repetidas primero y las menos repetidas al final: sort -bdf nombre.txt | uniq -ic | sort -nr
split
Permite dividir ficheros de texto, es decir, puedes usarlo como el opuesto a cat. Sería algo similar a Hoz o Hacha, los famosos programas para dividir ficheros. Por ejemplo:
#Dividir un fichero en ficheros de 1MB de tamaño (con nombres cortes.a cortes.b cortes.c...) split -b 1m nombre.7z cortes. #Para unirlos en uno solo nuevamente cat cortes.* > nombre.7z
Puedes usar otros tamaños, como -b 20k para separar en porciones de 20KB, etc.
tr
Para sustituir y eliminar caracteres de un texto, puedes usar tr. Por ejemplo:
#Usa la stdin para pasar sus minúsculas a mayúsculas echo "Hola, soy un mensaje" | tr a-z A-Z #Sustituye los espacios en blanco por tabulaciones echo "Hola, soy un mensaje" | tr [:space:] '\t' #Suprime las repeticiones de espacios si los hay echo "Hola , soy un mensaje" | tr -s [:space:] #Eliminar todos los caracteres e del mensaje echo "Hola, soy un mensaje" | tr -d 'e' #Elimina las letras y otros caracteres y deja solo los números echo "Hola, 1, 2, 3" | tr -cd [:digit:] #Unir todas las líneas de un fichero en una sola línea tr -s '\n' ' ' < nombre.txt
uniq
Por último, uniq permite eliminar o mostrar las líneas repetidas de un texto. Lo puede hacer desde la stdin o desde un fichero. Por ejemplo:
#Solo mostrar las líneas no repetidas (pero no modifica el fichero original) uniq nombre.txt #Muestra el número de repeticiones de cada línea uniq -c nombre.txt #Solo mostrar las líneas duplicadas uniq -D nombre.txt #Usar el segundo campo de cada línea como referencia para determinar si son o no iguales uniq -f 2 nombre.txt #Para más opciones man uniq
Ya sabes que para más información sobre cada una de ellas, y poder aprender más opciones, puedes consultar las páginas del manual usando man.
Pingback: viagra online