fbpx Expresiones Regulares en Linux: grep, sed, awk con Ejemplos | Certificação Linux

Expresiones Regulares en Linux: Sintaxis, grep, sed y awk con Ejemplos

📅 03/04/2019 ⏱ 8 min ✍️ Uira Ribeiro
Linux
Expresiones Regulares en Linux: Sintaxis, grep, sed y awk con Ejemplos
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponible en
Google Play
Disponible en
App Store

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.
&list=PL6IznNGWCdD89jP8kiacplFQcJlmMmjhb&index=36

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.

&list=PL6IznNGWCdD89jP8kiacplFQcJlmMmjhb&index=90

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

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Después de años viendo profesionales perder horas en tareas simples por no conocer las herramientas correctas de Linux, decidí enseñar.
Hoy soy autor de la mayoría de los Materiales de Aprendizaje oficiales de la LPI y mentor de más de 14,000 alumnos certificados.

Conoce mi historia completa →

Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp