Monthly Archives: August 2011

Preparando LPIC-1 103.7 Buscar en archivos de texto usando expresiones regulares

1- Introduccion
2- Regular expression position anchors
3- Regular expression character sets
4- Regular expression Quantity modifiers
5- Usando Sed
6- Usando Sed – Substitution flags
7- Usando Grep

Introduccion

Aca vamos a poder ver algunos ejemplos de este topico.
En las expresiones regulares vamos a utilizar string de texto o patrones por lo cuales estos ultimos vamos a usar dos tipos de carateres ( texto plano o metacaracteres).

Vamos a ver como manejar todo esto con ejemplos.

\ es un caracter de escape lo que venga despues de el no se intepreta.

Regular expression position anchor

Regular expression position anchors
^ , $ , \<\>

Ahi tenemos esos tres casos.

Antes vamos a crear un archivo:

[root@localhost ~]# cat test
Villa Dalmine
Restaurador de Leyes

JMR
Argentina
[root@localhost ~]#

Anchors are used to describe position information. Table 6-8, shown earlier, lists anchor
characters.

Ejemplo:

[root@localhost ~]# grep '^Villa' test
Villa Dalmine
[root@localhost ~]#

Como vemos este ^ signo me sirve para poder filtrar aquellos renglones que comienzan con una letra o palabra en especial o patro…

Ahora vamos a ver un ejemplo con $

[root@localhost ~]# grep 'Dalmine$' test
Villa Dalmine
[root@localhost ~]#

Aca vimos que con el signo $ vamos a poder un patro que indique un final de un renglon.

Ejemplo:

Ahora vamos a usar en conjuncion ^$:

[root@localhost ~]# grep '^$' test 

[root@localhost ~]#
[root@localhost ~]# grep -c '^$' test
1
[root@localhost ~]#

En este ejemplo lo que paso fue que le dijimos que busque aquellos renglos que son nulos que en el texto tengo un enter.

Ejemplo:

[root@localhost ~]# grep '^Argentina$' test
Argentina
[root@localhost ~]#

Aca en este ejemplo lo que hicimos fue buscar si algun renglon contiene unicamente esa palabra.

Ahora el ultimo ejemplo para este grupo.

[root@localhost ~]# grep '\<[aA]rgentina\>' test
Argentina
argentina
[root@localhost ~]#
[root@localhost ~]# grep '\<[:alpha:]rgentina\>' test
argentina
[root@localhost ~]#

Aca como vemos esta opcion < > en conjunto con [] voy a buscar alguna palabra que sea Argentina o Argentina.


Regular expression POSIX character classes

Character class Description
[:alnum:] Alphanumeric [a-zA-Z0-9]
[:alpha:] Alphabetic [a-zA-Z]
[:blank:] Spaces or Tabs
[:cntrl:] Control characters
[:digit:] Numeric digits [0-9]
[:graph:] Any visible characters
[:lower:] Lowercase [a-z]
[:print:] Noncontrol characters
[:punct:] Punctuation characters
[:space:] Whitespace
[:upper:] Uppercase [A-Z]
[:xdigit:] Hex digits [0-9a-fA-F]

Otro Grupo:

Regular expression character sets

Regular expression character sets
[abc][a-z]
[^abc][^a-z]
.

Ejemplos:
Los caracteres pueden ser situados en grupos y rangos para realizar expresiones regulares mas efecientes.

Ver este archivo:
[root@localhost ~]# cat test
Villa Dalmine
Restaurador de Leyes de Argentina

JMR
Argentina
argentina
124Argentina
12JMR
12345JMR
[root@localhost ~]#

Ejemplo:

[root@localhost ~]# grep '[Aa]rgentina' test
Restaurador de Leyes de Argentina
Argentina
argentina
124Argentina
[root@localhost ~]#

Aca como vimos nos devolvio todas las palabras que son contenidas cumpliendo con Argentina o Argentina o 123Argentina y asi..

Otro:

[root@localhost ~]# grep ‘[0-9][0-9][0-9]’ test
124Argentina
12345JMR
[root@localhost

Aca estamos buscando aquellos parametros que empiezan por lo menos con tres numeros.
Otro:

[root@localhost ~]# grep ‘^[^0-9]’ test
Villa Dalmine
Restaurador de Leyes de Argentina
JMR
Argentina
argentina
[root@localhost ~]#
Aca nos va a devolver aquellos parametros que que empiezan con cualquiera cosa que no sea un numero.

Regular expression Quantity modifiers

BRE:
*,\?,\+,\{n,m},\|,\(regex\)
ERE
*,?,+,{n,m},|,\regex)

 

VamosĀ  a ver algunos ejemplos en donde mezclaremos el uso de character set con la cantidad de veces que necesitemos utilizar esa busqueda.

[rino@oc7287280510 ~]$ cat file1
ab
abc
abcc
abccc
asaabsde
ffda4
[rino@oc7287280510 ~]$

[rino@oc7287280510 ~]$ grep abc* file1
ab
abc
abcc
abccc
asaabsde
[rino@oc7287280510 ~]$

Como ven nos trajo todo lo que contiene ab,abc,abcc y asi..

[rino@oc7287280510 ~]$ grep abcc* file1
abc
abcc
abccc
[rino@oc7287280510 ~]$

Aca nos trajo todo lo que contiene abc,abcc,abccc y asi ..

Otro ejemplo:

[rino@oc7287280510 ~]$ cat file1
123456
abc12asf1245
a1gb1sd2
12456
[rino@oc7287280510 ~]$

[rino@oc7287280510 ~]$ grep ‘[0-9][0-9][0-9]*’ file1
123456
abc12asf1245
12456
[rino@oc7287280510 ~]$

Todo lo que contenga al menos dos numeros.

Tambien asi es lo mismo.

[rino@oc7287280510 ~]$ grep '[0-9]\{2,\}' file1
123456
abc12asf1245
12456
[rino@oc7287280510 ~]$

el \{2,\} lo que hace es repetir dos veces lo que dice antes.

Otro Ejemplo:

[rino@oc7287280510 ~]$ cat file1
file1
file2
fil1
[rino@oc7287280510 ~]$

[rino@oc7287280510 ~]$ grep 'file[12]\?' file1
file1
file2
[rino@oc7287280510 ~]$

Aca como ven me devuelve file1 y file2 porque con ? puede encontrar cero ocurriencias.

Otro Ejemplo:

[rino@oc7287280510 ~]$ cat file1
Hola1
Como estas
es $1
[rino@oc7287280510 ~]$

[rino@oc7287280510 ~]$ grep '[0-9]\+' file1
Hola1
es $1
[rino@oc7287280510 ~]$

Todas aquellas lineas que contienen el numero 1.

Otro Ejemplo:

[rino@oc7287280510 ~]$ cat file1
1
11
111
1111
11111
1010110
[rino@oc7287280510 ~]$

[rino@oc7287280510 ~]$ grep '^1\{3,5\}$' file1
111
1111
11111
[rino@oc7287280510 ~]$

Todas aquellas lineas que empiezan con 1 y el rango es de 111 a 11111.

Otro Ejemplo:

 

[rino@oc7287280510 ~]$ cat file1
12
1
1234
12345
124
[rino@oc7287280510 ~]$

[rino@oc7287280510 ~]$ grep '\<[0-9]\{2,5\}\>' file1
12
1234
12345
124
[rino@oc7287280510 ~]$

Al menos contienen desde dos digitos hasta cinco.

Otro ejemplo:

[rino@oc7287280510 ~]$ cat file1
El Mundo Linux y sus consecuencias.
El mundo linux y Sus Consecuencias.
EL MUNDO LINUX Y SUS CONSECUENCIAS.
[rino@oc7287280510 ~]$

[rino@oc7287280510 ~]$ grep -E '[Ll]inux|[sS]us' file1
El Mundo Linux y sus consecuencias.
El mundo linux y Sus Consecuencias.
[rino@oc7287280510 ~]$

Aca estamos usando la version extendida del grep.

 

Usando Sed

Tenemos este archivo.

Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.

Patron para el sed.

s/pattern/replacement/flags

Usando Sed – Substitution flags

Cuatro flags para sustitucion:
A –> un numero que me indica en donde va a buscar la ocurrencia y cambiarla.
g –> Indica que todas las ocurrencias deben ser cambiadas del texto
p –> Indica que el contenido original de la linea debe ser mostrada.
w file –> Escribe el resultado de la substitucion en un archivo.

Aca le vamos a decir que solo lo cambie en la segunda linea.

[rino@oc7287280510 scripts]$ sed '2 s/Dalmine/River/' sed
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Toda la gente de Argentina es de River y Deportivo Merlo.
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
[rino@oc7287280510 scripts]$

Aca vamos a mostrar como cambiarlo de forma global

[rino@oc7287280510 scripts]$ sed 's/Dalmine/River/g' sed
Toda la gente de Argentina es de River y Deportivo Merlo.
Toda la gente de Argentina es de River y Deportivo Merlo.
Toda la gente de Argentina es de River y Deportivo Merlo.
Toda la gente de Argentina es de River y Deportivo Merlo.
[rino@oc7287280510 scripts]$

Le agregamos hola al final del archivo.
[rino@oc7287280510 scripts]$ echo “hola” >> sed

[rino@oc7287280510 scripts]$ sed -n 's/Hola/Chau/p' sed
Chau
[rino@oc7287280510 scripts]$

Ahora vamos a guardar la salida de lo que cambia en un archivo nuevo.

[rino@oc7287280510 scripts]$ sed  's/Hola/Chau/w sed2' sed
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Toda la gente de Argentina es de Dalmine y Deportivo Merlo.
Chau
[rino@oc7287280510 scripts]$ cat sed2
Chau
[rino@oc7287280510 scripts]$

Para ver mas en profunidad –> Usando Sed

Usando Grep

Ver el siguinte Link –> Usando Grep

Referencia –> LInks:
[1] http://www.gentoo.org/doc/es/articles/l-sed2.xml
[2] http://enavas.blogspot.com/2008/03/el-shell-de-linux-comando-sed.html