Expresiones regulares y filtros

Expresiones regulares y filtros

Una expresión regular es un patrón que define a un conjunto de cadenas de caracteres. Las expresiones regulares se construyen de forma análoga a las expresiones aritméticas. Existe la posibilidad de combinar expresiones simples; para ello, debemos emplear distintos operadores.

Los bloques básicos de construcción son las expresiones regulares que referencias un único carácter. La mayoría de los caracteres, incluyendo todas las letras y dígitos, son expresiones regulares que se definen a si mismos. Cualquier metacarácter con significado especial debe ser precedido del símbolo backslash para que pierda su significado especial.

Una lista de caracteres encerrados dentro de [] referencia cualquier carácter sencillo de esa lista. Si el primer carácter es un ^ entonces estaremos haciendo referencia a los caracteres que no aparecen en la lista.

Los caracteres ^ y $ son metacaracteres que representan una cadena vacía al principio y al final de la línea, respectivamente. Los símbolos < y > representan una cadena vacía al principio y al final de una palabra.

Una expresión regular que representa un carácter sencillo puede ser continuada con uno o varios caracteres de repetición:

?El elemento precedente es opcional y debe coincidir al menos una vez.
*El elemento precedente debe coincidir cero o más veces
{n}El elemento precedente debe coincidir exactamente n veces
+El elemento precedente debe coincidir una o más veces.
{,m}El elemento precedente es opcional y debe coincidir al menos m veces.
{n,m}El elemento precedente debe coincidir al menos n veces pero no más de m veces.

Dos expresiones regulares pueden unirse con el operador |. La expresión resultante representa cualquier cadena que responda a uno de los dos patrones.

Ejemplos:

PatrónQué representa
pabloLa cadena pablo
^pabloLa cadena pablo al comienzo de una línea.
pablo$La cadena pablo al final de una línea.
^pablo$La cadena pablo formando una única línea.
niñ[oa]La cadena niño o niña
ni[^aeiou]oLa tercera letra no es una vocal minúscula.
ga.oLa tercera letra es cualquier carácter.
^….$Cualquier línea que contenga 4 caracteres.
^.Cualquier línea que comienza por punto.
^[^.]Cualquier línea que no comienza por punto.
niños*niño, niños, niñoss, niñosss, etc
“niño”niño entre comillas dobles.
“*niño”*niño con o sin comillas dobles.
[a-z][a-z]*una o más letras minúsculas.
[a-z]+una o más letras minúsculas (sólo válido en algunas aplicaciones).
[^0-9A-Z]cualquier caracter que no sea ni número ni letra mayúscula.
[a-zA-Z]cualquier letra sea mayúscula o minúscula.
[Ax5]cualquier carácter que sea A, x o 5.
niño|niña|nadauna de las tres palabras.
(s|arb)ustola palabra susto o arbusto.
ga?t[oa]gato, gata, gasto, gaita, etc.
<gacualquier palabra que empiece por ga.
 ño>cualquier palabra que termine por ño
<niño>la palabra niño
o{2,}dos o más oes en una misma fila.

Siempre que empleemos expresiones regulares con grep, deben se encerradas entre comillas dobles para que el interprete de órdenes no los considere. Si dentro de la expresión regular tenemos el metacarcter $ , deberemos emplear comillas simples en lugar de las comillas dobles.

Filtros

sort: Sintaxis sort [-ndt] [+campo] [archivo(s)]
Este filtro se utiliza para ordenar líneas compuestas por cmpos, separados por tabuladores, aunque podemos especificar cualquier tipo de separador de campo. Si a sort no le pasamos ningún archivo como prámetro, tomará su entrada de la entrada estándar como cualquier filtro. Con este filtro podemos ordenar las líneas de uno varios archivos según un campo en particular. Esta ordenación no produce ninguna modificación en los archivos tratados.

Algunas opciones:

-nconsidera el valor numérico para ordenar los campos.
-dconsiderar sólo espacios en blanco y caracteres alfanuméricos.
-t seputiliza sep como separador de campos.

grep: Sintaxis grep [-inv] patrón [archivo(s)]

Es un filtro que permite buscar cadenas de caracteres en los archivos que le indiquemos
Opciones:

-iIndica a grep que se ignoren mayúsculas y minúsculas
-vvisualiza por pantalla las líneas que no contienen el patrón indicado.
-nmuestra por pantalla el número de línea en que se encuentra el patrón.

wc: Sintaxis wc [-lwc] [archivo(s)]
Se trata de un contador de líneas, palabras y caracteres.
Opciones:

-lvisualiza sólo el número de líneas.
-wvisualiza sólo el número de palabras.
-cvisualiza sólo el número de caracteres.

cut: Sintaxis cut -c lista [archivo(s)]
cut -f lista [-dcar] [archivo(s)]
Se usa para cortar y pasar a la salida estándar las columnas o campos de la entrada estándar o del archivo especificado. La opción -c es para cortar columnas y -f para cortar campos. Al cortar un campo, existe la opción -d para especificar los caracteres de separación entre los distintos campos (car). Por defecto el delimitador es el tabulador, al menos que se indique otra cosa.
Una lista es una secuencia de números que se usa para indicarle a cut qué campos o columnas se quieren cortar. Hay varios formatos para esta lista.

X-YColumnas o campos desde X hasta Y inclusive.
X-Columnas o campos desde X hasta el final.
X-YColumnas o campos X e Y.

tr: Sintaxis tr [-dsc] cadena1 cadena2
Se emplea como traductor. Como todo filtro tr lee datos de la entrada estándar, los procesa y deposita los resultados en la salida estándar. Busca los caracteres indicados por cadena1 y los sustituye por cadena2.

-dsirve para eliminar los caracteres indicados por cadena 1
-selimina caracteres repetidos indicados por cadena1
-cindica contrario, que no coincida con cadena1.

tee: Sintaxis tee [-a] [archivo(s)]
Esta orden orden lee la entrada estándar por defecto y escribe su salida a la salida estándar y al archivo especificado. Si se utiliza la opción -a (append), tee  añade su salida al archivo en lugar de sobreescribirlo.

find: Sintaxis find camino expresión
La orden find es una de las más potentes de UNIX, pero también una de las que tienen una sintaxis más compleja. Esta orden se usa para examinar toda la estructura de directorios, o señalados en la línea de órdenes. Una vez localizados, podemos hacer que ejecute distintas acciones sobre ellos. El campo expresión sirve para indicar los criterios de selección de los archivos y la acción que queremos aplicarles al encontrarlos.

Ejemplo:
$ find / -name ifconfig                               (busca el archivo ifconfig dentro de la estructura de directorios)
La opción -name indica a find que únicamente se busquen los archivos cuyo nombre se especifica a continuación. Cuando find no puede buscar en un determinado directorio por no poseer derechos de acceso, no los comunica. Para evitar estos mensajes de error podemos redirigir el error a /dev/null.
Ejemplo:
$ find / -name login 2>/dev/null
Opciones:

-userle indicamos a find que seleccione los archivos que pertenezcan al usuario que se indica a continuación de -user.
-groupselecciona los archivos pertenecientes al grupo indicado a continuación.
-mtime narchivos modificados hace n días.
-mtime -narchivos modificados en los últimos n días.
-mtime +narchivos modificados hace más de n días.
-size -marchivos cuyo tamaño es menor de m bloques.
-size +marchivos cuyo tamaño es mayor de m bloques.
-type xarchivos del tipo indicado por x (d directorios, f archivos, l enlaces, etc.).
-inum narchivos cuyo inodo es n
-perm modearchivos cuyos permisos sean los dados por mode.
-exec ordenejecuta la orden usando como argumento los resultados de la búsqueda.

Todas estas opciones pueden ser negadas con el carácter ! seguido de un espacio en blanco.

sed: Sintaxis  sed [-f f_ord] [-n] [archivo(s)]
La herramienta sed es un editor de flujo (stream editor) utilizado para manipular archivos de texto. sed copia los archivos indicados (por defecto, el archivo estándar de entrada) en la salida estándar después de procesarlos. Este procesamiento de los archivos de entrada se lleva a cabo línea por línea, acorde con las órdenes dadas a sed, estas órdenes pueden residir en un archivo, en cuyo caso usaremos la opción -f seguida del nombre del archivo que contiene las órdenes (f_ord). La opción -n se utiliza si queremos ver la línea que está siendo procesada.
Algunas órdenes de sed:
         sustituye  sed ‘s/procesar/manipular/g’ archivo        (aquí indicamos que queremos sustituir procesar por manipular a lo largo de todo   el archivo, lo indica g.)
d    borra sed ‘1,3d’ archivo   (elimina desde la línea 1 hasta la 3 del archivo)

y   traduce caracteres (los cambia por otros) sed ‘y/[aeiou]/[AEIOU]/’ archivo               (cambia las vocales en minúsculas por vocales en mayúsculas).