Con el Terminal: Uso de expresiones regulares

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:

ADVERTENCIA: Este post es un coรฑazo. Leer este post todo seguido puede provocar pรฉrdida de consciencia. Haga pausas en medio o consulte a su mรฉdico o farmacรฉutico antes de leer todo el post.

ยฟ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.


Deja tu comentario

Tu direcciรณn de correo electrรณnico no serรก publicada. Los campos obligatorios estรกn marcados con *

*

*

  1. Responsable de los datos: Miguel รngel Gatรณn
  2. Finalidad de los datos: Controlar el SPAM, gestiรณn de comentarios.
  3. Legitimaciรณn: Tu consentimiento
  4. Comunicaciรณn de los datos: No se comunicarรกn los datos a terceros salvo por obligaciรณn legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu informaciรณn.

      Ezequiel dijo

    Que serรญa de nuestra vida sin las regex?
    Muy รบtil el artรญculo, pero lo irรฉ leyendo de a poco. Muchas gracias.

         hexborg dijo

      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. ๐Ÿ™‚

      Scalibur dijo

    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

         hexborg dijo

      De nada. รnimo y que las expresiones regulares no puedan contigo. ๐Ÿ™‚

      Tanrax dijo

    ยกFantรกtico post! Gran trabajo. Me pregunto cuantas horas te habrรก costado ๐Ÿ˜€

         hexborg dijo

      ยกJajaja!! La pregunta es: ยฟCuรกntas horas me habrรญa costado si hubiera dicho todo lo que tenรญa intenciรณn de decir? ยกInfinitas!! ๐Ÿ™‚

      tammuz dijo

    una cosa q no sabia, buen articulo!

         hexborg dijo

      Gracias. Es un placer compartirlo con vosotros.

      helena_ryuu dijo

    magna explicacion. felicitaciones!, realmente util!

         hexborg dijo

      Me alegro de que te haya parecido util. Asรญ da gusto escribir.

      anti dijo

    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.

         hexborg dijo

      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. ๐Ÿ™‚

      Fernando dijo

    ยก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.

         hexborg dijo

      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. ๐Ÿ™‚

      Ellery dijo

    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

         hexborg dijo

      Cierto. Esa es otra forma de conseguirlo. Gracias por el aporte. ๐Ÿ™‚

      KZKG^Gaara dijo

    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รญ ๐Ÿ˜€

         hexborg dijo

      Sabรญa que te iba a gustar. ยกJajajaja!! La verdad es que le faltan muchas cosas, pero ya tengo pensada una segunda parte. ๐Ÿ™‚

      Eliรฉcer Tatรฉs dijo

    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!

         hexborg dijo

      ยกJajajaja!! Lรกstima haber llegado tarde, pero me alegro de que sea รบtil. ๐Ÿ™‚

      LeoToro dijo

    Por fin!!!, super bueno el post….por fin encontrรฉ algo que explicara claramente las expresiones regulares…..

         hexborg dijo

      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.

      Shakespeare Rodas dijo

    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.

         hexborg dijo

      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.

      chipo dijo

    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.

      Caly dijo

    Muy bueno , acabo de leerlo todo , y sรญ ahora necesito una aspirina ๐Ÿ™‚

      ร“scar dijo

    La mejor explicaciรณn que he visto de las expresiones regulares. Mi agradecimiento al autor por compartir este trabajo.

    Un saludo.

      Alexader dijo

    una muy buena explicacion me gusto mucho