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.
Comentarios