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:
- Use vi para abrir el archivo, busque un patrón y realice el cambio (incluso automáticamente usando reemplazar).
- 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:
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 |