Cuatro herramientas básicas para filtrar y procesar texto en línea de comandos: sed, grep, cat y awk

Entre los comandos básicos de todos los sistemas Unix podemos encontrar un puñado de ellos destinados a trabajar con flujos de texto (procesándolo, seleccionándolo, editándolo, etc).

Gracias al hecho de poder encontrarlos en todos los Linux, BSD (y con ello, macOS) y Windows 10-11 (gracias a WSL) del planeta, tener una noción básica sobre la labor que realizar puede resultar muy útil si en algún momento necesitamos recurrir a ellos; por ejemplo, para crear shell scripts.

A continuación, te presentamos un somero resumen de cuatro de estos comandos, sin ánimo de exhaustividad a la hora de examinar sus diferentes opciones.

Grep: el buscador

El nombre del comando deriva de 'Global search' + 'Regular Expresion' + 'Print', lo cual ya da pistas sobre su comportamiento.

La labor del comando 'Grep' es la de filtrar los contenidos de un determinado fichero, buscando para ello la cadena de caracteres y/o la expresión regular que le indiquemos (lo que denominamos 'patrón'). Una vez encontrada, visualizará en pantalla la línea completa de cada resultado, aunque los modificadores pueden cambiar eso.

Grep viene a ser, de algún modo, el equivalente del típico 'Ctrl + F' de las herramientas gráficas, si bien su uso en terminal le dota de mayor versatilidad, dándonos la oportunidad —por ejemplo— de redirigir la salida del comando a un nuevo archivo de texto que muestre únicamente ciertas líneas del archivo original.

  • Sintaxis:

$grep [-modificadores] [patrón] [archivo/s]

En el ejemplo "grep -n usuario *.log" le estamos indicando a Grep que muestre en pantalla todas las líneas (indicando su número) que contengan el término 'usuario'… y que realice esta operación con todos los archivos .log del directorio.

Sed: el reemplazador

'Sed' es la abreviatura de 'Stream Editor', y se trata de un procesador de texto en el sentido más tradicional del término: pues con base en las indicaciones que le demos transformará el contenido de uno o varios archivos, permitiéndonos —por ejemplo— cortar texto o reemplazarlo.

Ojo, porque modificar "el contenido de un archivo" no significa necesariamente que modifique el archivo en sí: el texto procesado se mostrará únicamente en la salida estándar (la pantalla) a no ser que le especifiquemos otro comportamiento al programa.

  • Sintaxis:

$sed [línea de inicio [, línea de fin]] función [argumentos]

Así, por ejemplo, la instrucción "$sed 's/Ilíada/Odisea/g' fichero.txt" no incluye línea de inicio ni fin, pero el modificador '/g' indica a sed que debe sustituir en todo el contenido del fichero.txt la palabra 'Ilíada' por 'Odisea'.

Cat: el visualizador (y aglutinador)

'Cat' no es ninguna referencia gatuna —que sepamos— sino una abreviatura de 'concatenar', pues es el comando responsable de concatenar y visualizar textos.

Así, no sólo permite mostrar todo el contenido de uno o varios archivos en pantalla, sino redireccionar esa salida estándar a un nuevo archivo que los aglutine. Recurriendo a los modificadores, podremos realizar otras tareas como la supresión de líneas vacías.

  • Sintaxis:

$cat [modificador] [archivo/s]

Así, el comando "cat capitulo*.txt" mostraría en pantalla, de forma consecutiva, el contenido de todos los archivos de texto cuyo nombre comience por 'capitulo'. Se recomienda utilizar esta clase de órdenes conjuntamente con el comando 'more', para darnos la opción de ir pasando 'página' (o, más bien, buffer) al leer.

¿Dudabais que la editorial O'Reilly tuviera un libro al respecto, acaso? (PD: Tiene más).

Awk: el lenguaje Todo-en-Uno

Awk puede hacer prácticamente todo lo que hacen los anteriores, y varias cosas más. De hecho, más que un simple comando de procesamiento de patrones, se trata de un potente lenguaje de scripting para el análisis semántico, que contempla el uso de variables o de condicionales 'if', por ejemplo.

  • Sintaxis:

$awk [modificadores] instrucciones [fichero]

Así, por ejemplo, en "awk '{if ($1 > 10) print $1}' fichero.txt", le estamos diciendo a Awk que muestre en pantalla el primer elemento de cada línea del fichero en cuestión, siempre y cuando se trate de un número mayor que 10.

Ver todos los comentarios en https://www.genbeta.com

VER 4 Comentarios

Portada de Genbeta