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


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