Expresiones Regulares en Linux: Sintaxis, grep, sed y awk con Ejemplos
Hablando en serio. Saquen a los niños de la sala. Si no sabes ni un poquito de expresiones regulares en Linux, todavía no sabes Linux. Es como tener un Yate para andar en la piscina de casa.
Una expresión regular es un método formal para especificar un patrón de texto a buscar en uno o más archivos.
Es una composición de caracteres con funciones especiales (metacaracteres) que agrupados entre sí con caracteres literales (de A a Z) y números pueden formar una secuencia, una expresión que el shell y los editores de texto pueden entender y buscar.
Las expresiones regulares son útiles para buscar o validar textos variables como:
- Número de dirección IP;
- Dirección de correo electrónico;
- Dirección de Internet (URL);
- Datos en una columna en un texto;
- Datos que están entre <tags></tags> de un lenguaje, como HTML;
- Número de CNPJ, RG, CPF, etc.;
- Fecha y hora.
Varios editores de texto y lenguajes de programación ofrecen soporte a expresiones regulares. Las herramientas importantes que trabajan con este recurso para el examen CompTIA Linux+ son el grep y el sed.
Comando grep
Uso:
$ grep [opções] expressão-regular arquivos
El comando grep es ampliamente usado en el día a día de las tareas administrativas en Linux.
Él filtra las líneas de un determinado archivo buscando una expresión regular como patrón.
Grep puede leer uno o más archivos que se pasan como argumento o puede recibir en la entrada estándar la redirección de la salida de otro proceso.
Si grep recibe más de un archivo o un comodín como argumento para realizar su búsqueda, indicará el nombre del archivo seguido de dos puntos y la línea encontrada.
Sus opciones más frecuentes son:
- -c: Muestra únicamente el conteo de las ocurrencias en los archivos y no las líneas donde se encontraron las ocurrencias;
- -h: Muestra únicamente las líneas encontradas, sin la indicación del nombre de los archivos;
- -i: Busca las ocurrencias ignorando si las letras están en mayúsculas o minúsculas;
- -v: Muestra todas las líneas del archivo buscado excepto las ocurrencias encontradas. Tiene el efecto inverso;
- -n: Muestra, además del texto de las líneas encontradas, el número de las líneas dentro de los archivos;
- -B n: Muestra n líneas antes de la línea encontrada;
- -A n: Muestra n líneas después de la línea encontrada.
Ejemplos:
$ grep uira /etc/passwd
uira:x:500:100:uira:/home/uira:/bin/bash
Busca la palabra uira en el archivo /etc/passwd.
$ grep ‘^u’ /etc/passwd
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
uira:x:500:100:uira:/home/uira:/bin/bash
Busca todas las líneas que comienzan con la letra u en el archivo /etc/passwd. El acento circunflejo simboliza el inicio de una línea.
$ grep ‘false$’ /etc/passwd
mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
Busca todas las líneas que terminan con la palabra false. El símbolo $ representa el fin de una línea.
$ grep ‘^[aeiou]’ /etc/passwd
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
uira:x:500:100:uira:/home/uira:/bin/bash
alias:x:501:1000::/var/qmail:/bin/false
En el shell, siempre utilice 'comillas simples' cuando vaya a utilizar expresiones regulares.
Busca todas las líneas que comienzan con las vocales. La expresión regular llamada lista busca cualquiera de los caracteres dentro del corchete. Note que la lista solo busca por un solo carácter, por más grande que sea.
$ grep ‘^.[aeiou]’ /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
uira:x:500:100:uira:/home/uira:/bin/bash
Busca por todas las líneas en que el primer carácter sea cualquiera y el segundo carácter sea una vocal. El punto final en la expresión regular simboliza "un carácter cualquiera".
$ grep ‘[0-9][0-9][0-9][0-9]’ /etc/passwd
squid:x:31:65534:WWW-proxy squid:/var/cache/squid:/bin/false
nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash
alias:x:501:1000::/var/qmail:/bin/false
qmaild:x:502:1000::/var/qmail:/bin/false
Busca por líneas que contengan una secuencia de cuatro números consecutivos.
$ cat * | grep security
Busca en todos los archivos en un directorio la ocurrencia de la palabra security.
Comando egrep
Uso:
$ egrep [opções] expressão-regular arquivos
El comando egrep es muy parecido a grep, pero soporta expresiones regulares con los metacaracteres +, ?, | y ().
Comando fgrep
Uso:
$ fgrep [opções] chave-procura arquivos
El comando fgrep también es parecido a grep, pero no soporta expresiones regulares, buscando únicamente una clave de búsqueda o un texto en los archivos. Por este motivo, es más rápido que grep, pero menos versátil.
Comando sed
Uso:
$ sed [opciones] {script}
El comando sed es un editor de textos simple utilizado para hacer pequeñas transformaciones en el contenido de los archivos.
El sed recibe un texto de uno o más archivos pasados como argumento en la línea de comando y lo transforma enviando la modificación a la salida estándar (monitor de video).
Si queremos que el sed realmente altere el contenido del archivo es necesario utilizar el redireccionador mayor-que ">" hacia otro archivo cualquiera y luego copiarlo. La opción "-i extensión" también permite editar directamente el archivo y guardar una copia de seguridad con la extensión indicada.
$ sed ‘s/\/usr\/local\/bin/\/usr\/bin/’ texto.txt > textonovo.txt
Puede optar por utilizar el –i, de forma que el sed modificará texto.txt y mantendrá un backup en texto.txtold:
$ sed –i old ‘s/\/usr\/local\/bin/\/usr\/bin/’ texto.txt
Reemplaza la secuencia /usr/local/bin por /usr/bin en el archivo texto.txt. Observe que las contrabarras (\) le indican al intérprete de expresiones regulares que el carácter inmediatamente posterior debe interpretarse en su forma literal y no como un símbolo de expresión regular.
$ sed ‘s/uira/carla/’ /etc/passwd
Reemplaza el nombre uira por el nombre carla en el archivo /etc/passwd
Resumen de las Expresiones Regulares
Observe en la tabla los principales símbolos que pueden combinarse para formar expresiones regulares complejas:
TABLA – Expresiones Regulares
| Símbolo | Descripción |
| ' | Las comillas simples se utilizan para delimitar el texto dentro de ellas como caracteres literales sin interpretar ningún carácter que esté dentro de ellas como metacaracter. |
| " | Las comillas dobles se utilizan para delimitar el texto dentro de ellas como caracteres literales excepto los signos "$" y "\". |
| \ | La contrabarra se utiliza para indicar que el carácter inmediatamente posterior debe interpretarse como literal. |
| ^ | El acento circunflejo se utiliza para indicar el inicio de una línea. |
| $ | El signo de pesos se utiliza para indicar el final de una línea. |
| [aeiou] | Una secuencia de caracteres dentro de corchetes se interpreta como todos los caracteres válidos para la búsqueda. |
| [a-z] | El signo menos indica que cualquier carácter entre la letra a y la letra z son válidos. |
| [^abc] | Indica que cualquier carácter excepto las letras a, b, c son válidos en la búsqueda. |
| /palabra/ | Indica que la palabra buscada deberá estar separada por espacios a la izquierda y a la derecha. |
| [0-9] | Indica que cualquier número de cero a nueve es válido para la búsqueda. |
| . | El punto final indica cualquier carácter excepto una línea en blanco. |
Ejemplos:
Para buscar las líneas que comienzan con "Nov 10":
$ grep "^Nov 10" messages
Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Nov 10 01:18:49 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3
Para buscar las líneas que terminan con "terminating.":
$ grep "terminating.$" messages
Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.
Para contar las líneas en blanco en meulog.log, utilizamos el "^$":
$ grep -c "^$" meulog.log
meulog.log:3
Para buscar todas las ocurrencias ".ola" de un archivo:
$ grep ".ola" archivo
Mola
Cola
Tola
Hola

Aprenda mucho más sobre Linux en nuestro curso en línea. Puede realizar la inscripción aquí. Si ya tiene una cuenta, o quiere crear una, simplemente ingrese o cree su usuario aquí.
¿Le gustó? Comparta
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.