En sistemas, se conoce como filtro un programa que sabe escribir y leer datos por los canales estándares de entrada y salida. Dicho programa modifica o trata si es preciso el contenido. Por ejemplo, wc es un filtro. Las herramientas no siempre se comportan como filtros. Permiten un determinado número de acciones en archivos y su contenido, como por ejemplo, dar formato o imprimir.

Extrayendo rutas y nombres

Tenemos dos comandos que nos van a facilitar mucho la vida, sobretodo a la hora de realizar scripts. Estos comandos son basename y dirname:

El comando basename permite extraer el nombre del archivo en una ruta:

basename /etc/hosts
hosts

El comando dirname permite extraer lo contrario, la ruta o path:

Búsqueda de líneas

Se trata de extraer líneas de un archivo según varios criterios. Para ello, disponemos de tres comandos: grep, egrep, y fgrep, que leen los datos o bien desde un archivo de entrada , o bien desde el canal de entrada estándar.

grep

La sintaxis del comando grep es muy sencilla:

grep [Opciones] modelo [Archivo…]

El modelo se compone de criterios de búsqueda, que pueden ser cadenas de texto o bien expresiones regulares. Por ejemplo:

$ cat file
Software Libre
Richard Stallman
Gimp
Inkscape
PortalLinux
software
Open Source

Si queremos filtrar por las palabras que empiezan por ese sin importar si es mayúscula o minúscula:

$ grep "^[sS]" file
Software Libre
software

Otras opciones interesantes del comando grep:

  • -v: Efectúa la búsqueda inversa y se visualizarían todas aquellas palabras excepto Software Libre y software.
  • -c: Devuelve el número de líneas encontradas, sin mostrarlas.
  • -i: No diferencia entre mayúscylas ni minúsculas.
  • -n: Indica el número de línea para cada línea encontrada.
grep -n "[1]" file
1:Software Libre
6:software
  • -l: En el caso de ficheros múltiples, indica en qué archivo se ha encontrado la línea.

egrep

El comando egrep extiende los criterios de búsqueda y puede aceptar un archivo de criterios en entrada. Equivale a un grep -E. Emplea como criterios expresiones regulares. Por ejemplo, si tenemos el mismo fichero de antes y creamos uno nuevo con el criterio antes puesto entre comillas:

$ cat file
Software Libre
Richard Stallman
Gimp
Inkscape
PortalLinux
software
Open Source
$ cat criterio
^[sS]

fgrep

El comando fgrep es un grep simplificado y rápido (fast grep) y equivale a un grep -F. Acepta también un archivo de criterios de búsqueda, pero debe tratarse de criterios simples, sin caracteres especiales, es decir, texto y cifras.

sed

Del comando sed podríamos hacer un libro. Sed es un editor de flujo (Stream Editor) que permite filtrar y transformar texto. Es un poco como un editor que permite modificar texto vía comandos de scripts, pero en un paso y sin edición interactiva.

Para utilizar sed hay que tener un control bastante bueno de las expresiones regulares -de las cuales algún día hablaremos profundamente- El cuadro del comando egrep retoma la sintaxis básica de las expresiones. Cualquier libre sobre sed parte de estas expresiones y recíprocamente.

Muchas veces vamos a ver el comando sed que se utiliza para sustituir cadenas de texto:

# echo «Me llamo Agapito» | sed -e ‘s/Agapito/Manolo/’
Me llamo Manolo

Son las tantas de la noche cuando estoy escribiendo esto y creo que con sed realmente se podría hacer mil entradas explicando que se puede hacer. Así que por el momento, nos vamos a quedar con este ejemplo tan útil.

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación