next up previous
Next: Más scripts de Shell Up: Curso de GNU/Linux para Previous: Filtros - Básicos

Subsecciones

Filtros - Avanzados

Existen, además de los filtros que ya vimos, otros dos filtros muy poderosos, llamados sed y awk. Tienen una sintaxis tan avanzada que se los considera pequeños lenguajes de programación. En este curso no los vamos a estudiar.

Sin embargo, gran parte de la potencia de estos es su manejo de expresiones regulares que es el mismo que el de grep, que veremos a continuación.

grep

Como ya vimos, podemos hacer grep patrón archivos y veremos las líneas que concuerdan con el patrón en esos archivos,

La gran fortaleza de grep se encuentra en la sintaxis del patrón. Hasta ahora, el patrón que ingresábamos era simplemente una palabra, y eso le indicaba a grep que debía encontrar las líneas que contuvieran esa palabra.

Sin embargo, en ese patrón podemos incluir lo que se llama una expresión regular. Las expresiones regulares son cadenas de caracteres que permiten transmitirle a los filtros una búsqueda mucho más avanzada. Tenemos la posibilidad, por ejemplo, de indicar si queremos que algo esté al principio o al final de un archivo, si queremos que esté repetido una determinada cantidad de veces, etc.

Un problema común es que muchos de los caracteres que grep usa como caraceres especiales son los mismos que usa el shell como metacaracteres y esto puede llegar a confundirnos mucho, por lo que usamos los patrones entre comillas simples ('...') para evitar problemas de intrepretación del shell. Pero también podemos querer que el grep no interprete determinado caracter en ese caso usamos \.

egrep o grep -E y fgrep o grep -F

En realidad, grep es el primero de una familia de comandos, egrep tiene un set de expresiones regulares más completo, mientras fgrep esta optimizado para manejo de archivos grandes, pero solo busca literales.

En la actualidad la version GNU de estos comandos resume los tres dentro de grep con las opciones -E y -F, pero existen más, como el ngrep (network grep), grepmail, etc.

Expresiones de grep, egrep

Se listan a continuación las expresiones de grep y egrep, por orden de precedencia, con una explicación somera de su significado.

Expresión Significado
c cualquier caracter no especial, concuerda a si mismo
$\backslash$c cancela significado especial de c
^ inicio de línea
$ fin de línea
. cualquier caracter individual
[...] cualquiera de los caracteres en ...; incluye rangos de tipo a-z
[^...] cualquiera de los caracteres que no esté en ...; también se incluyen los rangos a-z
r* cero o más ocurrencias de r
r+ una o más ocurrencias de r (egrep)
r? cero o una ocurrencia de r (egrep)
r1|r2 expresión r1 o expresión r2 (egrep)
$\backslash$(r$\backslash$) agrupar expresión regular r (grep)
(r) agrupar expresión regular r (egrep)
$\backslash$num lo que concordó con la num-ésima expresión regular agrupada

Ante la pregunta posible, que puede surgir mirando esta tabla, de cuál es el significado de (r) cuando se utiliza grep, la respuesta es que simplemente concuerda con los paréntesis, como cualquier caracter sin significado especial

Ejercicios

Utilizando el diccionario que se encuentra en el directorio /usr/share/dict, encontrar las expresiones regulares que concuerdan con los siguientes tipos de palabras.

  1. Palíndromos de 3 letras (ej: ala, asa, ata).
  2. Palíndromos de 4 letras (ej: erre).
  3. Palíndromos desde 3 a 9 letras (ej: salas, rallar, anilina)
  4. Palabras que tienen todas sus letras ordenadas alfabéticamente.
  5. Palabras que tienen todas sus vocales ordenadas alfabéticamente.
  6. Palabras que tienen todas las vocales. (ayuda: utilizar varios grep encadenados).


next up previous
Next: Más scripts de Shell Up: Curso de GNU/Linux para Previous: Filtros - Básicos
hecho por Margarita Manterola y Maximiliano Curia