Una de las cosas que siempre me ha encantado de la terminal de Linux es lo que se puede conseguir usando expresiones regulares. Tanto si necesitamos buscar un texto complicado como reemplazarlo por otra cosa, usar expresiones regulares puede simplificar el trabajo enormemente. Empecemos por el principio:
ยฟQuรฉ es una expresiรณn regular?
Una expresiรณn regular es una serie de caracteres especiales que permiten describir un texto que queremos buscar. Por ejemplo, si quisiรฉramos buscar la palabra ยซlinuxยป bastarรญa poner esa palabra en el programa que estemos usando. La propia palabra es una expresiรณn regular. Hasta aquรญ parece muy simple, pero, ยฟy si queremos buscar todos los nรบmeros que hay en un determinado fichero? ยฟO todas las lineas que empiezan por una letra mayรบscula? En esos casos ya no se puede poner una simple palabra. La soluciรณn es usar una expresiรณn regular.
Expresiones regulares vs patrones de ficheros.
Antes de empezar a entrar en materia sobre las expresiones regulares, quiero aclarar un malentendido comรบn sobre las expresiones regulares. Una expresiรณn regular no es lo que ponemos como parรกmetro en los comandos como rm, cp, etc para hacer referencia a varios fichero que hay en el disco duro. Eso serรญa un patrรณn de ficheros. Las expresiones regulares, aunque se parecen en que usan algunos caracteres comunes, son diferentes. Un patrรณn de fichero se lanza contra los ficheros que hay en el disco duro y devuelve los que encajan completamente con el patrรณn, mientras que una expresiรณn regular se lanza contra un texto y devuelve las lineas que contienen el texto buscado. Por ejemplo, la expresiรณn regular correspondiente al patrรณn *.*
seria algo asรญ como ^.*\..*$
Tipos de expresiones regulares.
No todos los programas utilizan las mismas expresiones regulares. Ni mucho menos. Existen varios tipos de expresiones regulares mรกs o menos estรกndar, pero hay programas que cambian ligeramente la sintaxis, que incluyen sus propias extensiones o incluso que utilizan unos caracteres completamente diferentes. Por eso, cuando querรกis usar expresiones regulares con algรบn programa que no conozcรกis bien, lo primero es mirar el manual o la documentaciรณn del programa para ver cรณmo son las expresiones regulares que reconoce.
En primer lugar, existen dos tipos principales de expresiones regulares, que estรกn recogidas en el estรกndar POSIX, que es el que usan las herramientas de Linux. Son las expresiones regulares bรกsicas y las extendidas. Muchos de los comandos que trabajan con expresiones regulares, como grep o sed, permiten usar estos dos tipos. Mรกs abajo hablare de ellos. Tambiรฉn estรกn las expresiones regulares estilo PERL, y luego hay programas como vim o emacs que usan variantes de estas. Segรบn lo que queramos hacer puede ser mรกs adecuado usar unas u otras.
Probando expresiones regulares.
La sintaxis de las expresiones regulares no es nada trivial. Cuando tengamos que escribir una expresiรณn regular complicada estaremos delante de una ristra de caracteres especiales imposibles de entender a primera vista, asรญ que para aprender a usarlas es imprescindible contar con una forma de hacer todas las pruebas que queramos y ver los resultados fรกcilmente. Por eso voy a poner ahora varios comandos con los que podremos hacer las pruebas y experimentar todo lo que necesitemos hasta que tengamos las expresiones regulares dominadas.
El primero de ellos es el comando grep. Este es el comando que usaremos con mรกs frecuencia para hacer bรบsquedas. La sintaxis es la siguiente:
grep [-E] 'REGEX' FICHERO
COMANDO | grep [-E] 'REGEX'
Recomiendo poner siempre las expresiones regulares entre comillas simples para que el shell no nos haga de las suyas. La primera forma sirve para buscar una expresiรณn regular en un fichero. La segunda permite filtrar la salida de un comando a travรฉs de una expresiรณn regular. Por defecto, grep usa expresiones regulares bรกsicas. La opciรณn -E es para usar expresiones regulares extendidas.
Un truco que nos puede ayudar a ver el funcionamiento de las expresiones regulares es activar el uso del color en el comando grep. De esa manera, aparecerรก resaltada la parte del texto que empareja con la expresiรณn regular que estamos usando. Para activar el color en el comando grep basta con asegurarse que la variable de entorno GREP_OPTIONS
contenga en valor --color
, cosa que se puede hacer con este comando:
GREP_OPTIONS=--color
Podemos ponerlo en el .bashrc para tenerlo activado siempre.
Otra forma de usar expresiones regulares es mediante el comando sed. Este es mรกs adecuado para reemplazar texto, pero tambiรฉn puede usarse para hacer bรบsquedas. La sintaxis para ello serรญa asรญ:
sed -n[r] '/REGEX/p' FICHERO
COMANDO | sed -n[r] '/REGEX/p'
El comando sed tambiรฉn usa expresiones regulares bรกsicas por defecto, se pueden usar expresiones regulares extendidas con la opciรณn -r.
Otro comando que tambiรฉn quiero nombrar es awk. Este comando puede usarse para muchas cosas, ya que permite escribir scripts en su propio lenguaje de programaciรณn. Si lo que queremos es buscar una expresiรณn regular en un fichero o en la salida de un comando, la forma de usarlo serรญa la siguiente:
awk '/REGEX/' FICHERO
COMANDO | awk '/REGEX/'
Este comando usa siempre expresiones regulares extendidas.
Para hacer nuestras pruebas tambiรฉn necesitaremos un texto que nos sirva como ejemplo para hacer bรบsquedas en รฉl. Podemos utilizar el siguiente texto:
- Lista de pรกginas wiki: ArchLinux:ย https://wiki.archlinux.org/ Gentoo:ย https://wiki.gentoo.org/wiki/Main_Page CentOS:ย http://wiki.centos.org/ Debian:ย https://wiki.debian.org/ Ubuntu:ย https://wiki.ubuntu.com/ -ย Fechasย deย lanzamiento: Archย Linux:ย 11-03-2002 Gentoo:ย 31/03/2002 CentOs:ย 14-05-2004ย 03:32:38 Debian:ย 16/08/1993 Ubuntu:ย 20/10/2004 Desdeย Linuxย Rulez.
Este es el texto que usarรฉ para los ejemplos del resto del post, asรญ que os recomiendo que lo copiรฉis en un fichero para tenerlo a mano desde la terminal. Podรฉis poner el nombre que querรกis. Yo lo he llamando regex.
Entrando en materia.
Ahora ya tenemos todo lo necesario para empezar a probar las expresiones regulares. Vayamos poco a poco. Voy a poner varios ejemplos de bรบsquedas con expresiones regulares en los que irรฉ explicando para quรฉ sirve cada carรกcter. No son ejemplos muy buenos, pero como me va a quedar un post muy largo no quiero complicarlo mรกs. Y eso que sรณlo voy a araรฑar la superficie de lo que se puede hacer con expresiones regulares.
Lo mรกs sencillo de todo es buscar una palabra concreta, por ejemplo, supongamos que queremos buscar todas las lineas que contengan la palabra ยซLinuxยป. Esto es lo mรกs fรกcil, ya que sรณlo tenemos que escribir:
grep 'Linux' regex
Y podremos ver el resultado:
ArchLinux: https://wiki.archlinux.org/ Arch Linux: 11-03-2002 Desde Linux Rulez.
Estas son las tres lineas que contienen la palabra ยซLinuxยป la cual, si hemos usado el truco del color, aparecerรก resaltada. Fijaros que reconoce la palabra que estamos buscando aunque forme parte de una palabra mรกs larga como en ยซArchLinuxยป. Sin embargo, no resalta la palabra ยซlinuxยป que aparece en la URL ยซhttps://wiki.archlinux.org/ยป. Eso es porque ahรญ aparece con la ยซlยป minรบscula y la hemos buscado en mayรบscula. El comando grep tiene opciones para esto, pero no voy a hablar de ellas en un artรญculo que trata sobre expresiones regulares.
Con esta sencilla prueba podemos sacar la primera conclusiรณn:
- Un carรกcter normal puesto en una expresiรณn regular empareja consigo mismo.
Lo que viene a decir que si pones la letra ยซaยป buscarรก la letra ยซaยป. Parece lรณgico, ยฟverdad? ๐
Supongamos ahora que queremos buscar la palabra ยซCentOยป seguida de cualquier carรกcter, pero sรณlo un รบnico carรกcter. Para esto podemos usar el carรกcter ยซ.ยป, que es un comodรญn que empareja con un carรกcter cualquiera, pero sรณlo uno:
grep 'CentO.' regex
Y el resultado es:
CentOS: http://wiki.centos.org/ CentOs: 14-05-2004 03:32:38
Lo que significa que incluye la ยซSยป de ยซCentOSยป aunque en un caso es mayรบscula y en otro minรบscula. Si apareciera en ese lugar cualquier otro carรกcter tambiรฉn lo incluirรญa. Ya tenemos la segunda regla:
- El carรกcter ยซ.ยป empareja con cualquier carรกcter.
Ya no es tan trivial como parecรญa, pero con esto no podemos hacer mucho. Avancemos un poco mรกs. Vamos a suponer que queremos encontrar las lรญneas en las que aparece el aรฑo 2002 y el 2004. Parecen dos bรบsquedas, pero se pueden hacer de una sola vez asรญ:
grep '200[24]' regex
Lo que quiere decir que queremos buscar el nรบmero 200 seguido del 2 o el 4. Y el resultado es este:
Arch Linux: 11-03-2002 Gentoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 Ubuntu: 20/10/2004
Lo que nos lleva a la tercera regla:
- Varios caracteres encerrados entre corchetes emparejan con cualquiera de los caracteres que hay dentro de los corchetes.
Los corchetes dan mรกs juego. tambiรฉn se pueden usar para excluir caracteres. Por ejemplo, supongamos que queremos buscar los sitios en los que aparece el carรกcter ยซ:ยป, pero que no vaya seguido de ยซ/ยป. El comando serรญa asรญ:
grep ':[^/]' regex
Se trata simplemente de poner un ยซ^ยป como primer carรกcter dentro del corchete. Se pueden poner a continuaciรณn todos los caracteres que se quieran. El resultado de este รบltimo comando es el siguiente:
ArchLinux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/ Arch Linux: 11-03-2002 Gentoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10/2004
Ahora aparecen resaltados los ยซ:ยป que hay detrรกs de los nombres de las distros, pero no los que hay en las URL porque los de las URL llevan ยซ/ยป a continuaciรณn.
- Poner el carรกcter ยซ^ยป al principio de un corchete empareja con cualquier carรกcter excepto con los demรกs caracteres del corchete.
Otra cosa que podemos hacer es especificar un rango de caracteres. Por ejemplo, para buscar cualquier nรบmero seguido de un ยซ-ยป serรญa asรญ:
grep '[0-9]-' regex
Con esto estamos especificando un carรกcter entre 0 y 9 y, a continuaciรณn, un signo menos. Veamos el resultado:
Arch Linux: 11-03-2002 CentOs: 14-05-2004 03:32:38
Se pueden especificar varios rangos dentro de los corchetes a incluso mezclar rangos con caracteres sueltos.
- Colocar dos caracteres separados por ยซ-ยป dentro de los corchetes empareja con cualquier carรกcter dentro del rango.
Vamos a ver ahora si podemos seleccionar la primera parte de las URL. La que pone ยซhttpยป o ยซhttpsยป. Sรณlo se diferencian en la ยซsยป final, asรญ que vamos a hacerlo de la siguiente manera:
grep -E 'https?' regex
La interrogaciรณn sirve para hacer que el carรกcter que hay a su izquierda sea opcional. Pero ahora hemos aรฑadido la opciรณn -E al comando. Esto es porque la interrogaciรณn es una caracterรญstica de las expresiones regulares extendidas. Hasta ahora estรกbamos usando expresiones regulares bรกsicas, asรญ que no hacรญa falta poner nada. Veamos el resultado:
ArchLinux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/
O sea que ya tenemos una nueva regla:
- Un carรกcter seguido de ยซ?ยป empareja con ese carรกcter o con ninguno. Esto sรณlo es vรกlido para expresiones regulares extendidas.
Ahora vamos a buscar dos palabras completamente diferentes. Vamos a ver cรณmo buscar las lineas que contengan tanto la palabra ยซDebianยป como ยซUbuntuยป.
grep -E 'Debian|Ubuntu' regex
Con la barra vertical podemos separar dos o mรกs expresiones regulares diferentes y buscar las lineas que emparejen con cualquiera de ellas:
Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/ Debian: 16/08/1993 Ubuntu: 20/10/2004
- El carรกcter ยซ|ยป sirve para separar varias expresiones regulares y empareja con cualquiera de ellas. Tambiรฉn es especรญfico de las expresiones regulares extendidas.
Continuemos. Ahora vamos a buscar la palabra ยซLinuxยป, pero sรณlo donde no estรฉ pegada a otra palabra por la izquierda. Podemos hacerlo asรญ:
grep '\
Aquรญ el carรกcter importante es ยซ<ยซ, pero es necesario escaparlo colocando ยซ\ยป delante para que grep lo interprete como un carรกcter especial. El resultado es el siguiente:
Arch Linux: 11-03-2002 Desde Linux Rulez.
Tambiรฉn se puede usar ยซ\>ยป para buscar palabras que no estรฉn pegadas a otras por la derecha. Vamos con un ejemplo. Probemos este comando:
grep 'http\>' regex
El resultado que produce es este:
CentOS: http://wiki.centos.org/
Ha salido ยซhttpยป, pero no ยซhttpsยป, porque en ยซhttpsยป todavรญa hay un carรกcter a la derecha de la ยซpยป que puede formar parte de una palabra.
- Los caracteres ยซ<ยป y ยซ>ยป emparejan con el principio y el final de una palabra, respectivamente. Hay que escapar estos caracteres para que no se interpreten como caracteres literales.
Vamos con cosas un poco mรกs complicadas. El carรกcter ยซ+ยป empareja con el carรกcter que aparece a su izquierda repetido al menos una vez. Este carรกcter sรณlo estรก disponible con las expresiones regulares extendidas. Con รฉl podemos buscar, por ejemplo, secuencias de varios nรบmeros seguidos que empiecen con ยซ:ยป.
grep -E ':[0-9]+' regex
Resultado:
CentOs: 14-05-2004 03:32:38
Queda resaltado tambiรฉn el nรบmero 38 porque tambiรฉn empieza con ยซ:ยป.
- El carรกcter ยซ+ยป empareja con el carรกcter que aparece a su izquierda repetido al menos una vez.
Tambiรฉn se puede controlar el nรบmero de repeticiones usando ยซ{ยป y ยซ}ยป. La idea es colocar entre llaves un nรบmero que indica el nรบmero exacto de repeticiones que queremos. Tambiรฉn se puede poner un rango. Vamos a ver ejemplos de los dos casos.
Primero vamos a buscar todas las secuencias de cuatro dรญgitos que haya:
grep '[0-9]\{4\}' regex
Fijaros en que hay que escapar las llaves si estamos usando expresiones regulares bรกsicas, pero no si usamos las extendidas. Con extendidas serรญa asรญ:
grep -E '[0-9]{4}' regex
Y el resultado en los dos casos serรญa este:
Arch Linux: 11-03-2002 Gentoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10/2004
- Los caracteres ยซ{ยป y ยซ}ยป con un nรบmero entre ellos emparejan con el carรกcter anterior repetido el nรบmero de veces indicado.
Ahora el otro ejemplo con las llaves. Supongamos que queremos encontrar palabras que tengan entre 3 y 6 letras minรบsculas. Podrรญamos hacer lo siguiente:
grep '[a-z]\{3,6\}' regex
Y el resultado serรญa este:
- Lista de pรกginas wiki: ArchLinux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/ - Fechas de lanzamiento: Arch Linux: 11-03-2002 Gentoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10/2004 Desde Linux Rulez.
Que, como veis, no se parece mucho a lo que querรญamos. Eso es porque la expresiรณn regular encuentra las letras dentro de otras palabras que son mรกs largas. Probemos con esta otra versiรณn:
grep '\<[a-z]\{3,6\}\>' regex
Resultado:
- Lista de pรกginas wiki: ArchLinux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/
Esto ya se parece mรกs a lo querรญamos. Lo que hemos hecho es exigir que la palabra empiece justo delante de la primera letra y termine justo detrรกs de la รบltima.
- Los caracteres ยซ{ยป y ยซ}ยป con dos nรบmeros entre ellos separados por una coma emparejan con el carรกcter anterior repetido el nรบmero de veces indicado por los dos nรบmeros.
Veamos ahora un carรกcter que es primo de ยซ+ยป. Se trata de ยซ*ยป y su funcionamiento es muy parecido sรณlo que empareja con cualquier nรบmero de caracteres incluido cero. O sea que hace lo mismo que el ยซ+ยป pero no exige que el carรกcter de su izquierda aparezca en el texto. Por ejemplo, probemos a buscar esas direcciones que empiezan en wiki y acaban en org:
grep 'wiki.*org' regex
Vamos a ver el resultado:
ArchLinux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/
Perfecto.
Ahora el รบltimo carรกcter que vamos a ver. El carรกcter ยซ\ยป sirve para escapar el carรกcter de su derecha de manera que pierda el significado especial que tiene. Por ejemplo: Supongamos que queremos localizar la lineas que terminen en punto. Lo primero que se nos podrรญa ocurrir podrรญa ser esto:
grep '.$' regex
El resultado no es el que buscamos:
- Lista de pรกginas wiki: ArchLinux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/ - Fechas de lanzamiento: Arch Linux: 11-03-2002 Gentoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10/2004 Desde Linux Rulez.
Esto es porque el carรกcter ยซ.ยป empareja con cualquier cosa, asรญ que esa expresiรณn regular empareja con el รบltimo carรกcter de cada linea sea cual sea. La soluciรณn es esta:
grep '\.$' regex
Ahora el resultado sรญ que es el que queremos:
Desde Linux Rulez.
Game over
Aunque el tema de las expresiones regulares es tan complejo que darรญa para una serie de artรญculos, creo que ya os he dado el coรฑazo suficiente. Si habรฉis conseguido llegar, enhorabuena. Y si habรฉis leรญdo todo esto de una sola vez, tomaros una aspirina o algo, porque no puede ser bueno.
Por ahora eso es todo. Si este artรญculo gusta, quizรกs pueda escribir otro. Mientras tanto os recomiendo probar todas las expresiones regulares en la terminal para ver claramente cรณmo funcionan. Y recordad: Sรณlo Chuck Norris puede parsear HTML usando expresiones regulares.
Que serรญa de nuestra vida sin las regex?
Muy รบtil el artรญculo, pero lo irรฉ leyendo de a poco. Muchas gracias.
Gracias a ti por comentar. Todavรญa no me creo que haya salido mi artรญculo. ๐ Ha salido con algรบn error, pero espero que sea รบtil. ๐
Graciasssssssss!..
Hace tiempo que me debรญa estudiar un poco sobre expresiones regulares.. ..te agredezco la enseรฑanza..y la guรญa paso a paso para ir aprendiendo cada uno de ellos..
Muy bueno!.. ..voy a por esa aspirina.. e.e
De nada. รnimo y que las expresiones regulares no puedan contigo. ๐
ยกFantรกtico post! Gran trabajo. Me pregunto cuantas horas te habrรก costado ๐
ยกJajaja!! La pregunta es: ยฟCuรกntas horas me habrรญa costado si hubiera dicho todo lo que tenรญa intenciรณn de decir? ยกInfinitas!! ๐
una cosa q no sabia, buen articulo!
Gracias. Es un placer compartirlo con vosotros.
magna explicacion. felicitaciones!, realmente util!
Me alegro de que te haya parecido util. Asรญ da gusto escribir.
Esto deberรญa de ir en algรบn lugar especial. Cรณmo los Destacados pero que tengan una รบtilidad muy especรญfica. Bastante รบtil, aunque me gustarรญa verlo aplicado a Vim.
Eso es cuestiรณn de planteรกrmelo. Tengo en mente algunos artรญculos mรกs sobre expresiones regulares. Y podrรญa hablar de vim en ellos. Tiene algunas diferencias con respecto a lo que he explicado en este artรญculo. Es cuestiรณn de ponerme con ello. ๐
ยกBuenas!
Muy bueno tu artรญculo, es curioso, recientemente (ahora mismo) he publicado en mi web una entrada que llevaba preparando desde hace unos dรญas donde he recogido una lista de metacaracteres para las expresiones regulares y algunos ejemplos. ยกY ha sido justo entrar en DesdeLinux y ver una entrada sobre la misma temรกtica!
Si te sirve de consuelo, la mรญa es BASTANTE MรS COรAZO ๐
Ciertamente las regex son una de las cosas mรกs รบtiles, yo las utilizo normalmente para recortar la salida de los comandos y quedarme con la parte que me interesa, para luego interactuar con ella en un script bash, por ejemplo. Tambiรฉn las he utilizado mucho en la universidad, y son de vital importancia en la construcciรณn de los compiladores (en la definiciรณn de los analizadores lexicogrรกficos y sintรกcticos). En definitiva, todo un mundo.
Un saludo y muy muy buen trabajo.
Muchas gracias.
Tambiรฉn me ha gustado tu artรญculo. Es mรกs conciso que el mรญo. Puede servir como referencia rรกpida. Sรญ que es casualidad que los hayamos escrito a la vez. Se ve que a la gente le interesa el tema. ๐
Expresiones regulares for dummies =), ahora me queda mas claro, por cierto una forma para tener las salida con color para grep, es creando un alias en .bashrc alias grep = ‘grep –color=always’, por si a alguien le sirve.
Saludos
Cierto. Esa es otra forma de conseguirlo. Gracias por el aporte. ๐
O_O … pedazo de aporte!!! O_O …
Muchas gracias por el post, estaba esperando algo asรญ desde hace un tiempo jejejeje, ya lo dejo abierto para leerlo con calma en casa con cero molestias para concentrarme jejejeje.
Gracias por el artรญculo, de veras que sรญ ๐
Sabรญa que te iba a gustar. ยกJajajaja!! La verdad es que le faltan muchas cosas, pero ya tengo pensada una segunda parte. ๐
Genial artรญculo, si solo lo hubiese leรญdo ayer, la clase que di hoy hubiese sido mรกs fรกcil aรบn para mis estudiantes!
ยกJajajaja!! Lรกstima haber llegado tarde, pero me alegro de que sea รบtil. ๐
Por fin!!!, super bueno el post….por fin encontrรฉ algo que explicara claramente las expresiones regulares…..
Hay mucha informaciรณn por ahรญ, pero es mรกs dificill encontrar algo que sea fรกcil de entender. Me alegro de haber cubierto ese hueco. ๐
Saludos.
Hey necesito ayuda, tengo que hacer una busqueda en /var/logs con el formato: yymmdd,y los logs vienen asi 130901.log -130901.log, tengo que buscar todos los que son comprendidos entre 1 de septiembre al 11 de octubre, lo unico que logrรฉ hacer fue sacar todos los de septiembre pero no se como hacer la cadena completa:
ej: 1309[0-3] me devuelve los logs comprendidos entre el 1 al 30 de septiembre, pero no se como sacar tambien en la misma cadena del 1 al 11 de octubre.
Para hacerlo mediante expresiones regulares es un poco complicado. Se me ocurre que podrรญa funcionar algo como esto:
13(09[0-3]|10(0|1[01]))
Es una expresiรณn regular extendida. No dices que herramienta estรกs usando, asรญ que no te puedo dar mรกs detalles.
De todos modos yo creo que es este caso en vez de usar expresiones regulares es mejor hacerlo con find. Puedes probar algo como esto:
find . -newermt ’01 sep’ -a ! -newermt ’11 oct’ -print
Suerte. Espero que te sirva.
Hola!, antes que nada querรญa agradecerte por tu labor ya que esta pรกgina estรก dentro de mi ยซtop 3ยป de mejores sitios sobre Linux.
Estaba practicando y no sabรญa por quรฉ no me funcionaba una RegExp sobre un numero de telefono y era que me faltaba el ยซ-Eยป (que me dรญ cuenta gracias a este post).
Querรญa consultarte si no conocรฉs algรบn buen pdf o sitio en donde haya ejercicios sobre RegExp, aunque si bien con un poco de imaginaciรณn se puede practicar inventรกndolos uno mismo.
Saludos, Pablo.
Muy bueno , acabo de leerlo todo , y sรญ ahora necesito una aspirina ๐
La mejor explicaciรณn que he visto de las expresiones regulares. Mi agradecimiento al autor por compartir este trabajo.
Un saludo.
una muy buena explicacion me gusto mucho