GNU/Linux >> Tutoriales Linux >  >> Linux

Introducción a las expresiones regulares

Las expresiones regulares pueden ser una de las herramientas más poderosas en su caja de herramientas como usuario de Linux, administrador del sistema o incluso como programador. También puede ser una de las cosas más abrumadoras de aprender, ¡pero no tiene por qué serlo! Si bien hay un número infinito de formas de escribir una expresión, no es necesario que aprenda todos los interruptores y banderas. En este breve tutorial, le mostraré algunas formas sencillas de usar expresiones regulares que lo pondrán en marcha en poco tiempo y compartiré algunos recursos de seguimiento que lo convertirán en un maestro de expresiones regulares si así lo desea.

Una descripción general rápida

Las expresiones regulares, también conocidas como patrones "regex" o incluso "declaraciones regulares", son en términos simples "una secuencia de caracteres que definen un patrón de búsqueda". La idea surgió en la década de 1950 cuando Stephen Cole Kleene escribió una descripción de una idea que llamó "lenguaje regular", parte de la cual se conoció como "teorema de Kleene". En un nivel muy alto, dice que si los elementos del lenguaje se pueden definir, entonces se puede escribir una expresión para que coincida con los patrones dentro de ese lenguaje.

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Desde entonces, las expresiones regulares han sido parte incluso de los primeros programas de Unix, incluidos vi, sed, awk, grep y otros. De hecho, la palabra grep se deriva del comando que se usó en el primer editor "ed", a saber, g/re/p , que esencialmente significa "hacer una búsqueda global de esta expresión regular e imprimir las líneas". ¡Genial!

Por que necesitamos expresiones regulares

Como se mencionó anteriormente, las expresiones regulares se utilizan para definir un patrón que nos ayude a hacer coincidir o "encontrar" objetos que coincidan con ese patrón. Esos objetos pueden ser archivos en un sistema de archivos cuando se usa find por ejemplo, o un bloque de texto en un archivo que podríamos buscar usando grep, awk, vi o sed, por ejemplo.

Comienza con lo básico

Empecemos por el principio; es un muy buen lugar para comenzar.

La primera expresión regular que todos parecen aprender es probablemente una que ya conoces y no te diste cuenta de qué se trataba. ¿Alguna vez ha querido imprimir una lista de archivos en un directorio, pero era demasiado larga? Tal vez hayas visto a alguien escribir \*.gif para listar imágenes GIF en un directorio, como:

$ ls *.gif

¡Esa es una expresión regular!

Al escribir expresiones regulares, ciertos caracteres tienen un significado especial que nos permite ir más allá de hacer coincidir solo caracteres para hacer coincidir conjuntos completos de caracteres. En este caso, el * El carácter, también llamado "estrella" o "salpicadura", toma el lugar de los nombres de archivo y le permite hacer coincidir todos los archivos que terminan con .gif .

Buscar patrones en un archivo

El siguiente paso en su entrenamiento de regex foo es buscar patrones dentro de un archivo, especialmente usando el patrón de reemplazo para hacer cambios rápidos.

Dos formas comunes de hacer esto son:

  1. Use vi para abrir el archivo, busque un patrón y realice el cambio (incluso automáticamente usando reemplazar).
  2. Utilice el "editor de secuencias", también conocido como sed, para buscar mediante programación dentro del archivo y realizar el cambio.

Comencemos aprendiendo algunas expresiones regulares usando vi para editar el siguiente archivo:

The quick brown fox jumped over the lazy dog.
Simple test
Harder test
Extreme test case
ABC 123 abc 567
The dog is lazy

Ahora, con este archivo abierto en vi, veamos algunos ejemplos de expresiones regulares que nos ayudarán a encontrar algunas cadenas coincidentes dentro e incluso reemplazarlas automáticamente.

Para facilitar las cosas, configuremos vi para ignorar mayúsculas y minúsculas. Escriba set ic para habilitar la búsqueda sin distinción entre mayúsculas y minúsculas.

Ahora, para comenzar a buscar en vi, escriba / carácter seguido de su patrón de búsqueda.

Buscar cosas al principio o al final de una línea

Para encontrar una línea que comience con "Simple", use este patrón de expresiones regulares:

/^Simple

Observe en la imagen a continuación que solo se resalta la línea que comienza con "Simple". El símbolo del quilate (^ ) es el equivalente de expresiones regulares de "comienza con".

A continuación, usemos el $ símbolo, que en expresiones regulares es "termina con".

/test$

¿Ves cómo resalta las dos líneas que terminan en "prueba"? Además, observe que la cuarta línea tiene la palabra prueba, pero no al final, por lo que esta línea no está resaltada.

Este es el poder de las expresiones regulares, que le brindan la capacidad de buscar rápidamente una gran cantidad de coincidencias con facilidad, pero profundizar específicamente solo en las coincidencias exactas.

Prueba de la frecuencia de ocurrencia

Para ampliar aún más sus habilidades en expresiones regulares, echemos un vistazo a algunos caracteres especiales más comunes que nos permiten buscar no solo texto coincidente, sino también patrones de coincidencias.

Caracteres coincidentes de frecuencia:

Buscar clases de personajes

El siguiente paso en el entrenamiento de expresiones regulares es usar clases de caracteres en nuestra coincidencia de patrones. Lo que es importante tener en cuenta aquí es que estas clases se pueden combinar como una lista, como [a,d,x,z] , o como un rango, como [a-z] y que los caracteres suelen distinguir entre mayúsculas y minúsculas.

Para ver este trabajo en vi, necesitaremos desactivar el caso de ignorar que configuramos anteriormente. Escribamos:set noic para volver a desactivar ignorar mayúsculas y minúsculas.

Algunas clases comunes de caracteres que se usan como rangos son:

  • a-z:todos los caracteres en minúsculas
  • A-Z:todos los caracteres en MAYÚSCULAS
  • 0-9:números

Ahora, intentemos una búsqueda similar a la que hicimos antes:

/tT

¿Notas que no encuentra nada? Eso es porque la expresión regular anterior busca exactamente "tT". Si reemplazamos esto con:

/[tT]

Veremos que tanto las T minúsculas como las MAYÚSCULAS coinciden en todo el documento.

Ahora, encadenemos un par de rangos de clase y veamos qué obtenemos. Prueba:

/[A-Z1-3]

Observe que las letras mayúsculas y 123 están resaltadas, pero no las letras minúsculas (incluido el final de la línea cinco).

Banderas

El último paso en su entrenamiento inicial de expresiones regulares es comprender las banderas que existen para buscar tipos especiales de caracteres sin necesidad de enumerarlos en un rango.

  • . – cualquier carácter
  • \s – espacio en blanco
  • \w – palabra
  • \d – dígito (número)

Por ejemplo, para encontrar todos los dígitos en el texto de ejemplo, use:

/\d

Observe en el siguiente ejemplo que todos los números están resaltados.

Para hacer coincidir al contrario, se suele utilizar la misma bandera, pero en MAYÚSCULAS. Por ejemplo:

  • \S – no un espacio
  • \W – ni una palabra
  • \D – ni un dígito

Observe en el siguiente ejemplo que al usar \D , todos los caracteres EXCEPTO los números están resaltados.

Buscando con sed

Una nota rápida sobre sed:es un editor de secuencias, lo que significa que no interactúa con una interfaz de usuario. Toma la corriente que entra por un lado y la escribe por el otro lado.

Usar sed es muy similar a vi, excepto que le da la expresión regular para buscar y reemplazar, y devuelve el resultado. Por ejemplo:

sed s/dog/cat/ examples

devolverá lo siguiente a la pantalla:

Si desea guardar ese archivo, es solo un poco más complicado. Deberá encadenar un par de comandos para a) escribir ese archivo yb) copiarlo sobre la parte superior del primer archivo.

Para hacer esto, intente:

sed s/dog/cat/ examples > temp.out; mv temp.out examples

Ahora, si miras tus examples archivo, verá que la palabra "perro" ha sido reemplazada.

The quick brown fox jumped over the lazy cat.
Simple test
Harder test
Extreme test case
ABC 123 abc 567
The cat is lazy

Para más información

Espero que esta haya sido una descripción general útil de las expresiones regulares. Por supuesto, esto es solo la punta del iceberg y espero que continúe aprendiendo sobre esta poderosa herramienta revisando los recursos adicionales a continuación.

Dónde obtener ayuda

  • Mi recurso favorito es la Referencia de bolsillo PERL
  • Para un dominio avanzado de las expresiones regulares, consulte Dominar las expresiones regulares por Jeff Friedl

Para ver más ejemplos, echa un vistazo

  • Cómo encontrar archivos en Linux
  • Validación de datos en Perl con Regexp::Common
  • 7 razones para amar a Vim

Linux
  1. Comenzando con Zsh

  2. Comenzando con ls

  3. Introducción a las expresiones regulares:un ejemplo

  4. Primeros pasos con PostgreSQL en Linux

  5. Primeros pasos con SSH en Linux

Primeros pasos con el sistema operativo Linux

Primeros pasos con GitHub

Primeros pasos con el administrador de paquetes de Nix

Primeros pasos con systemctl

Primeros pasos con el comando Tar

10 ejemplos prácticos de expresiones regulares con grep

    Carácter Significado Ejemplo
    * Cero o más ab* – la letra a seguido de cero o más b 's
    + Uno o más ab+ – la letra a seguido de uno o más b 's
    ? Cero o uno ab? – cero o solo uno b
    {n} Dado un número, encuentre exactamente ese número ab{2} – la letra a seguido de exactamente dos b 's
    {n,} Dado un número, encuentre al menos ese número ab{2,} – la letra a seguido de al menos dos b 's
    {n,y} Dados dos números, encuentre un rango de ese número ab{1,3} – la letra a seguido de entre uno y tres b 's