Patrones básicos 14.2
Las expresiones regulares son patrones que sólo ciertos comandos pueden interpretar. Las expresiones regulares se pueden expandir para que coincidan con ciertas secuencias de caracteres en el texto. Los ejemplos que se muestran en esta página harán uso de expresiones regulares para demostrar su potencia cuando se utilizan con el comando grep
. Además, estos ejemplos proporcionan una demostración muy visual de cómo funcionan las expresiones regulares, el texto que resulta de estas expresiones se mostrará en color rojo en el resultado (output).
Siga leyendo
Utilice el siguiente comando cd
para cambiar al directorio Documents
.
sysadmin@localhost:~$ cd ~/Documents
La más simple de todas las expresiones regulares solo usa caracteres de significado literal, como el ejemplo de la página anterior:
sysadmin@localhost:~/Documents$ grep sysadmin passwd sysadmin:x:1001:1001:System Administrator,,,,:/home/sysadmin:/bin/bash
Caracteres de anclaje
Los caracteres de anclaje son una de las formas con que se pueden utilizar expresiones regulares para limitar los resultados de una búsqueda. Por ejemplo, el patrón root
aparece muchas veces en el archivo /etc/passwd
:
sysadmin@localhost:~/Documents$ grep 'root' passwd root:x:0:0:root:/root:/bin/bash operator:x:1000:37::/root:
Para evitar que el shell los malinterprete como caracteres especiales del shell, estos patrones deben escribirse protegidos por comillas sólidas, lo que simplemente significa colocarlos entre comillas.
El primer carácter de anclaje ^
se utiliza para indicar que el patrón debe aparecer al principio de la línea. Por ejemplo, para encontrar todas las líneas en /etc/passwd
que comienzan con root
use el patrón ^root
. Tenga en cuenta que ^
debe ser el primer carácter del patrón para ser efectivo.
sysadmin@localhost:~/Documents$ grep '^root' /etc/passwd root:x:0:0:root:/root:/bin/bash
Para el siguiente ejemplo, examine primero el archivo alpha-first.txt
. El comando cat
se puede utilizar para mostrar el contenido del archivo:
sysadmin@localhost:~/Documents$ cat alpha-first.txt A is for Animal B is for Bear C is for Cat D is for Dog E is for Elephant F is for Flower
El segundo carácter de anclaje $
se puede utilizar para indicar que el patrón debe aparecer al final de la línea, reduciendo eficazmente los resultados de la búsqueda. Para encontrar las líneas que terminan con una r
en el archivo alpha-first.txt
, utilice el patrón r$
:
sysadmin@localhost:~/Documents$ grep 'r$' alpha-first.txt B is for Bear F is for Flower
Una vez más, la posición de este carácter es importante; el $
debe ser el último carácter en el patrón para ser eficaz como anclaje.
Encontrar caracteres coincidentes usando .
Los siguientes ejemplos usan el archivo red.txt
:
sysadmin@localhost:~/Documents$ cat red.txt Red Reef Rot Reeed Rd Rod Roof Reed Root reel read
Una de las expresiones más útiles es el carácter .
(punto). Representa cualquier carácter excepto el carácter de nueva línea. El patrón r..f
encontrará cualquier línea que contenga la letra r
seguida de exactamente dos caracteres (que pueden ser cualquier carácter excepto el de nueva línea) y luego la letra f
:
sysadmin@localhost:~/Documents$ grep 'r..f' red.txt reef roof
El mismo concepto se puede repetir usando otras combinaciones. El comando en el ejemplo siguiente encontrará palabras de cuatro letras que comienzan con r
y acaban con d
:
sysadmin@localhost:~/Documents$ grep 'r..d' red.txt reed read
Este carácter se puede utilizar tantas veces como se desee. Para encontrar todas las palabras de al menos cuatro caracteres se puede utilizar el siguiente patrón:
sysadmin@localhost:~/Documents$ grep '....' red.txt reef reeed roof reed root reel read
La línea no tiene que coincidir exactamente, simplemente debe contener el patrón, como se ve a continuación cuando se busca r..t
en el archivo /etc/passwd
:
sysadmin@localhost:~/Documents$ grep 'r..t' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:1000:37::/root:
Encontrar un carácter único usando []
Los corchetes [ ]
se utilizan para indicar caracteres únicos o rangos de caracteres posibles en una lista.
Por ejemplo, dado el archivo profile.txt
:
sysadmin@localhost:~/Documents$ cat profile.txt Hello my name is Joe. I am 37 years old. 3121991 My favorite food is avocados. I have 2 dogs. 123456789101112
Para encontrar todas las líneas en el archivo profile.txt
que contienen un número, utilice el patrón [0123456789]
o [0-9]
:
sysadmin@localhost:~/Documents$ grep '[0-9]' profile.txt I am 37 years old. 3121991 I have 2 dogs. 123456789101112
Por otro lado, para encontrar todas las líneas que contienen caracteres no numéricos, inserte un ^
como primer carácter dentro de los corchetes. Este carácter niega los caracteres que lo siguen:
sysadmin@localhost:~/Documents$ grep '[^0-9]' profile.txt Hello my name is Joe. I am 37 years old. My favorite food is avocados. I have 2 dogs.
Nota
No confunda el resultado de [^ 0-9]
con las líneas que no contienen números. En realidad, esta expresión se refiere a líneas que contienen no-números (caracteres no numéricos). Examine el archivo original para ver la diferencia. Las líneas tercera y sexta sólo contienen números, no contienen caracteres no numéricos, y por lo tanto no han sido incluidas en este último resultado.
Cuando otros caracteres de expresión regular se colocan dentro de corchetes, se tratan como caracteres literales. Por ejemplo, el carácter .
normalmente indica cualquier carácter. Pero si se coloca dentro de corchetes simplemente se referirá al carácter . (punto). En el siguiente ejemplo, sólo las líneas que contienen el carácter .
se mostrarán en el resultado.
sysadmin@localhost:~/Documents$ grep '[.]' profile.txt Hello my name is Joe. I am 37 years old. My favorite food is avocados. I have 2 dogs.
Indicar un carácter o patrón repetido utilizando el *
El carácter de expresión regular * se utiliza para indicar la ausencia o la presencia una o más veces del carácter o patrón que lo precede. Por ejemplo, e* indicaría la ausencia (cero) o la presencia, una o más veces, de la letra e:
sysadmin@localhost:~/Documents$ cat red.txt red reef rot reeed rd rod roof reed root reel read sysadmin@localhost:~/Documents$ grep 're*d' red.txt red reeed rd reed
También es posible indicar la ausencia o presencia una o más veces de una lista de caracteres utilizando los corchetes. El patrón [oe]*
utilizado en el siguiente ejemplo se refiere a líneas con ausencia o presencia una o más veces del carácter o
o del carácter e
:
sysadmin@localhost:~/Documents$ grep 'r[oe]*d' red.txt red reeed rd rod reed
Cuando se usa con un solo carácter, *
no resulta muy útil. Note que cualquiera de los siguientes patrones coincide con cada una de las líneas (string) del archivo: .*
e*
b*
z*
.
sysadmin@localhost:~/Documents$ grep 'z*' red.txt red reef rot reeed rd rod roof reed root reel read
sysadmin@localhost:~/Documents$ grep 'e*' red.txt red reef rot reeed rd rod roof reed root reel read
Esto se debe a que *
puede indicar cero ocurrencias de un patrón. Para que el *
sea útil, es necesario crear un patrón que incluya algo más que el carácter que precede al *
. Por ejemplo, los resultados anteriores se pueden refinar agregando otra e
para hacer que el patrón ee*
coincida efectivamente con cada línea que contenga al menos una e
.
sysadmin@localhost:~/Documents$ grep 'ee*' red.txt red reef reeed reed reel read
Entrada estándar
Si no se proporciona un nombre de archivo, el comando grep
actuará sobre la entrada estándar, que normalmente proviene del teclado y de la entrada proporcionada por el usuario que está ejecutando el comando. Esto permite que el uso de grep
se convierta en una experiencia interactiva donde el usuario escribe y grep
filtra la entrada a medida que avanza. Pruébelo. Simplemente presione Ctrl+D cuando esté listo para volver al intérprete de comandos (prompt).
Siga leyendo
Utilice el siguiente comando cd
para volver al directorio principal:
sysadmin@localhost:~/Documents$ cd ~
«Linux es open source. ¡Esto lo hace extremadamente versátil!»