LinuxParty

Ratio:  / 4
MaloBueno 

Las expresiones regulares (regexps) son unas muy poderosas herramientas, que le permite buscar cadenas de texto que coinciden con un patrón particular. En esta primera parte de una serie de dos partes, voy a mirar a su utilización en la línea de comandos. La siguiente parte abarcará las expresiones regulares en los editores y otros programas.

El intérprete de comandos incorpora la prestación "comodín"

Hay algunas básicas expresiones regulares (regexps) integradas en la shell: el ejemplo más básico de esto es el comodín *. Este ejemplo mostrará todos los archivos en el directorio actual que tiene la extensión. Jpg:

ls *.jpg

Lo que realmente ocurre aquí es que la shell amplía el * antes de que pasarle la lista de archivos a ls. De modo que la línea es realmente equivalente a

 ls file1.jpg file2.jpg ... 

Por el contrario, esta línea de comandos producirá la misma salida, pero usando grep con la sintaxis regexp completo

ls | grep '.*.jpg'

Esto ejecuta ls en el directorio actual (para mostrar una lista de todos los archivos), entonces pasa la salida a través de grep, que utiliza expresiones regulares "propias", en lugar del comando del shell. Aquí, tras grep y abrir la comillas

  1. el punto que hay detrás . significa "cualquier carácter",
  2. y * significa '0 o más caracteres precedentes (o anteriores): así .* es "0 o más de cualquier carácter". Es usado para escapar el segundo período (es decir concluye la orden .* donde empieza otra nueva...), por lo que es asimilado a un período real en lugar de un caracter suplente para 'cualquier carácter'. es decir, obtendremos los archivos que terminan. jpg.

Tenga en cuenta la diferencia entre este y el realizado en la shell integrada, donde un período es tratado como período real, y * significa "cualquier carácter".


Las comillas simples son muy importantes! Sin las comillas simples, la shell intentará realizar la expansión antes de ejecutar el comando, y resultarán cosas extrañas. Siempre comilla simple en sus expresiones regulares en la línea de comandos.

La disposición comodín de la shell puede ser muy útil. Lo importante es recordar que la sintaxis no es exactamente el mismo que para la propia de las expresiones regulares. Aquí hay otro comando del shell en el ejemplo, que se trasladará a todos los registros de su edad (que en mi sistema se nombran como mail.log.0.gz,system.log.1.bz2, etc) a un subdirectorio específico:

mv *.log.[0-9].* logarchive/


[0-9] se corresponderá con cualquier carácter entre 0 y 9: funciona con expresiones regulares adecuados, así como con la shell incorporada.

Artículo siguiente: Expresiones Regulares en Linux II

Comentarios   

+1 # Sandra 08-05-2014 19:41
Hola, veo que es un tema viejito , pero ojalá aún puedan ayudarme.

Estoy aprendiendo a usar las regexp desde vi tengo un documento y estoy buscando las palabras error o fail y sus derivados errors o failed o failure etc y mi regexp es:
:/\(.*\(error|fail\).*\)/
Al ejecutarla me dice que no hay coincidencias :( pero para
:/\(.*\(error\).*\)/
o
:/\(.*\(fail\).*\)/
Si encuentra coincidencias, podrían decirme como me estoy equivocando??
Responder | Responder con una citación | Citar
+1 # Javier Orovengua 09-05-2014 11:53
La verdad, nunca se me habría ocurrido la posibilidad de hacer una búsqueda conjunta, pero puedes probar a escribir:

:/.error/.fail
Responder | Responder con una citación | Citar
+1 # Javier Orovengua 09-05-2014 11:59
Es más, te voy a hacer una sugerencia, y cuando lo hayas solucionado nos cuentas...

Entras en vim, y escribes

:help

Escribes

:set mouse=a

Buscas "search", escribiendo:

/search

En la búsqueda te aparecerá el fichero pattern.txt, con las expresiones regulares, y nos dices como lo solucionastes, está en inglés pero es fácil de entender.
Responder | Responder con una citación | Citar
+1 # Javier Orovengua 09-05-2014 12:08
Esto, es lo que encontré en la ayuda... Buscando "or" para saber las opciones...

:/.*error\&.*fail

Si encuentras algo, comentarlo, gracias
Responder | Responder con una citación | Citar

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Encuesta de LinuxParty

Crees que la robotización traerá acarreada...

Que la gente abandonará las ciudades para vivir en los pueblos. - 16.4%
Que en los pueblos la robotización se frenará por los humanos - 13.1%
Que a la gente no les gustarán sus vecinos robots. - 3.3%
Que los negocios pequeños sufrirán la carencia de clientes humanos. - 9.8%
Que los humanos achacarán su desgracia a los robots y pasará algo grave. - 19.7%
Que los robots se levantarán contra los humanos y nos exterminarán. - 37.7%

Total votes: 61
The voting for this poll has ended on: 30 Sep 2017 - 00:00

Donar a LinuxParty

La mejor forma de darnos las gracias, es hacer una donación.


Tutorial de Linux

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política