Expresiones regulares en Linux: grep, sed y awk — Guía completa desde cero

📅 Actualizado en febrero 2026 ✍️ Ángel López 📊 Nivel: Avanzado ⏱️ 15 min de lectura

Si existe una habilidad que separa al usuario casual de Linux del administrador profesional, es el dominio de las expresiones regulares. Estas secuencias de caracteres, aparentemente crípticas, son en realidad el lenguaje más poderoso que existe para buscar, filtrar, extraer y transformar texto. Desde analizar gigabytes de logs de servidores hasta validar direcciones de correo electrónico, desde refactorizar código fuente hasta procesar datos científicos, las expresiones regulares son la herramienta que hace posible lo que ningún editor gráfico podría lograr. En Linux, donde la filosofía «todo es un archivo de texto» impregna cada aspecto del sistema, dominar las regex no es un lujo académico: es una necesidad operativa. Esta guía te llevará desde los conceptos fundamentales hasta las técnicas avanzadas con las tres herramientas esenciales — grep, sed y awk — con decenas de ejemplos prácticos que podrás usar desde hoy mismo.

🔍 ¿Qué son las expresiones regulares?

Una expresión regular (abreviada regex o regexp) es una secuencia de caracteres que define un patrón de búsqueda. Piensa en ella como un molde: describes qué forma tiene el texto que buscas, y el motor de expresiones regulares encuentra todas las cadenas que encajan en ese molde.

Por ejemplo, si necesitas encontrar todas las direcciones IP en un archivo de log, no puedes buscar cada IP una por una (hay millones de combinaciones posibles). En cambio, describes el patrón: «cuatro grupos de uno a tres dígitos separados por puntos». En notación regex, esto se expresa como [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}. Una sola línea de código reemplaza horas de trabajo manual.

Las expresiones regulares trabajan a nivel de caracteres, no de palabras ni de significado semántico. Cada carácter en una regex es una instrucción: puede representarse a sí mismo (un carácter literal), representar una clase de caracteres (cualquier dígito, cualquier letra), indicar repetición (una o más veces, cero o más veces), o marcar posición (inicio de línea, fin de palabra). La combinación de estos elementos permite describir patrones de complejidad arbitraria con una notación sorprendentemente compacta.

En el ecosistema Linux, las expresiones regulares están integradas en decenas de herramientas: grep para buscar, sed para sustituir, awk para procesar campos, find con -regex, el propio bash con el operador =~, editores como vim y nano, y prácticamente todos los lenguajes de programación (Python, Perl, JavaScript, Java, C). Aprender regex en un contexto se traduce automáticamente a todos los demás.

📌 Dato clave: El nombre grep proviene del comando del editor ed de Unix: g/re/p, que significa «Global Regular Expression Print» (búsqueda global de expresiones regulares e impresión de líneas coincidentes). El propio nombre de la herramienta más famosa de Linux es un homenaje a las regex.

📜 Historia: de la teoría de autómatas a grep

La historia de las expresiones regulares comienza en un lugar inesperado: las matemáticas puras. En 1951, el matemático Stephen Cole Kleene formalizó el concepto de «lenguajes regulares» como parte de la teoría de autómatas finitos. Su notación, conocida como «eventos regulares», describía patrones de cadenas de caracteres que podían ser reconocidos por una máquina de estados finitos. Era un trabajo puramente teórico, sin aplicación práctica inmediata.

El salto de la teoría a la práctica ocurrió en la década de 1960. Ken Thompson, uno de los creadores de Unix, implementó las expresiones regulares de Kleene en el editor de texto QED en el MIT, y posteriormente en el editor ed de Unix. Thompson no se limitó a implementarlas: para ganar velocidad, diseñó un sistema de compilación just-in-time (JIT) que convertía las expresiones regulares directamente en código máquina del IBM 7094. Era uno de los primeros ejemplos de compilación JIT de la historia de la informática.

En 1973, Thompson extrajo la funcionalidad de búsqueda por expresiones regulares de ed y la convirtió en una herramienta independiente: grep. El nombre, como ya hemos visto, deriva del comando g/re/p del editor. Grep se convirtió rápidamente en una herramienta indispensable en Unix, y su éxito impulsó la integración de expresiones regulares en sed (1974), awk (1977, creado por Aho, Weinberger y Kernighan), lex, vi y prácticamente todas las herramientas de procesamiento de texto que siguieron.

En las décadas siguientes, las expresiones regulares evolucionaron en tres «dialectos» principales: las Basic Regular Expressions (BRE) del Unix original, las Extended Regular Expressions (ERE) introducidas por egrep, y las Perl Compatible Regular Expressions (PCRE) desarrolladas por Larry Wall para Perl en 1987 y hoy utilizadas por Python, JavaScript, Java y la mayoría de lenguajes modernos. Cada dialecto amplía las capacidades del anterior, pero todos comparten la base conceptual de Kleene y Thompson.

📐 Sintaxis básica: BRE, ERE y PCRE

Uno de los mayores puntos de confusión para quien aprende regex en Linux es que existen tres «dialectos» con diferencias sutiles pero importantes en la sintaxis. Entender estas diferencias es fundamental para evitar frustraciones.

Los tres dialectos de expresiones regulares en Linux BRE (Basic) Herramientas: grep, sed (por defecto) Agrupación: \( \) Alternancia: \| Cuantificador +: \+ Cuantificador ?: \? Llaves: \{n,m\} Los metacaracteres necesitan \ Ejemplo: grep '\(ab\)\+' archivo Unix original · Más verbosa ERE (Extended) Herramientas: grep -E, sed -E, awk Agrupación: ( ) Alternancia: | Cuantificador +: + Cuantificador ?: ? Llaves: {n,m} Sin \ para metacaracteres Ejemplo: grep -E '(ab)+' archivo La más usada · Recomendada PCRE (Perl-compatible) Herramientas: grep -P, Python, Perl Todo ERE + lookahead: (?=...) Lookbehind: (?<=...) Grupos con nombre: (?P<n>...) Clases abreviadas: \d \w \s Cuantificador lazy: *? +? La más potente Ejemplo: grep -P '(?<=@)\w+' archivo No soportada por sed/awk/bash Los tres dialectos de expresiones regulares en Linux BRE (Basic) Herramientas: grep, sed (por defecto) Agrupación: \( \) Alternancia: \| Cuantificador +: \+ Cuantificador ?: \? Llaves: \{n,m\} Los metacaracteres necesitan \ Ejemplo: grep '\(ab\)\+' archivo Unix original · Más verbosa ERE (Extended) Herramientas: grep -E, sed -E, awk Agrupación: ( ) Alternancia: | Cuantificador +: + Cuantificador ?: ? Llaves: {n,m} Sin \ para metacaracteres Ejemplo: grep -E '(ab)+' archivo La más usada · Recomendada PCRE (Perl-compatible) Herramientas: grep -P, Python, Perl Todo ERE + lookahead: (?=...) Lookbehind: (?<=...) Grupos con nombre: (?P<n>...) Clases abreviadas: \d \w \s Cuantificador lazy: *? +? La más potente Ejemplo: grep -P '(?<=@)\w+' archivo No soportada por sed/awk/bash
Comparativa de los tres dialectos de expresiones regulares utilizados en Linux. ERE es el dialecto recomendado para uso general. Elaboración propia para Ciberaula.

La recomendación práctica es clara: usa siempre ERE (grep -E, sed -E, awk usa ERE por defecto). La sintaxis es más limpia y más intuitiva. Recurre a PCRE (grep -P) solo cuando necesites funcionalidades avanzadas como lookahead, lookbehind o cuantificadores lazy. Evita BRE salvo que trabajes con scripts heredados que lo requieran.

🧩 Metacaracteres y cuantificadores

Los metacaracteres son el vocabulario de las expresiones regulares. Cada uno tiene un significado especial que, combinado con otros, permite describir patrones de cualquier complejidad.

Caracteres especiales

MetacarácterSignificadoEjemploCoincide con
.Cualquier carácter (excepto salto de línea)c.tcat, cot, c4t, c-t
^Inicio de línea^ErrorLíneas que empiezan por «Error»
$Fin de línea\.conf$Líneas que terminan en «.conf»
[abc]Cualquiera de los caracteres listados[aeiou]Cualquier vocal minúscula
[^abc]Cualquier carácter que NO esté listado[^0-9]Cualquier carácter no numérico
[a-z]Rango de caracteres[A-Za-z]Cualquier letra
\bLímite de palabra\blinux\b«linux» como palabra completa
\dDígito (solo PCRE, equiv. [0-9])\d{3}Tres dígitos consecutivos
\wCarácter de palabra (solo PCRE, equiv. [a-zA-Z0-9_])\w+Una o más letras/dígitos
\sEspacio en blanco (solo PCRE)\s+Uno o más espacios/tabs
|Alternancia (OR)cat|dog«cat» o «dog»
()Agrupación y captura(ab)+«ab», «abab», «ababab»...
\Escape (carácter literal)\.Un punto literal

Cuantificadores

CuantificadorSignificadoEjemploCoincide con
*Cero o más repeticionesab*cac, abc, abbc, abbbc...
+Una o más repeticionesab+cabc, abbc, abbbc... (NO ac)
?Cero o una repetición (opcional)colou?rcolor, colour
{n}Exactamente n repeticiones[0-9]{4}Exactamente 4 dígitos
{n,}Al menos n repeticiones[a-z]{3,}3 o más letras minúsculas
{n,m}Entre n y m repeticiones[0-9]{1,3}De 1 a 3 dígitos
⚠️ Greedy vs. Lazy: Por defecto, los cuantificadores son «greedy» (codiciosos): intentan capturar la cadena más larga posible. .* aplicado a «abcXdefXghi» captura «abcXdefX», no «abcX». En PCRE puedes añadir ? al cuantificador para hacerlo «lazy»: .*? captura la cadena más corta posible. En ERE no existe esta opción, así que debes usar clases negadas: [^X]* en vez de .*?.

🔎 grep: búsqueda de patrones en archivos

grep es la herramienta más utilizada para buscar texto que coincida con un patrón. Su sintaxis básica es grep [opciones] 'patrón' archivo(s). La salida son las líneas que contienen al menos una coincidencia con el patrón.

Opciones esenciales

# Búsqueda básica
            grep 'error' /var/log/syslog

            # -i: ignorar mayúsculas/minúsculas
            grep -i 'warning' /var/log/syslog

            # -E: usar expresiones regulares extendidas (ERE)
            grep -E 'error|warning|critical' /var/log/syslog

            # -n: mostrar número de línea
            grep -n 'root' /etc/passwd

            # -c: contar coincidencias
            grep -c '404' access.log

            # -v: invertir (mostrar líneas que NO coinciden)
            grep -v '#' /etc/fstab    # Líneas sin comentarios

            # -r: búsqueda recursiva en directorios
            grep -r 'TODO' /home/user/proyecto/

            # -l: solo mostrar nombres de archivos con coincidencia
            grep -rl 'password' /etc/

            # -o: mostrar solo la parte que coincide, no toda la línea
            grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log

            # -w: coincidencia de palabra completa
            grep -w 'in' archivo    # NO coincide con "inside" o "begin"

            # -A/-B/-C: mostrar líneas de contexto (After/Before/Context)
            grep -C 3 'segfault' /var/log/kern.log   # 3 líneas antes y después

            # -P: usar PCRE (Perl Compatible Regular Expressions)
            grep -P '\d{2}/\w{3}/\d{4}' access.log   # Fechas tipo 26/Feb/2026

Combinaciones poderosas con pipes

# Contar conexiones únicas por IP en un log de Apache
            awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

            # Buscar procesos Java en ejecución
            ps aux | grep -i 'java' | grep -v 'grep'

            # Encontrar archivos PHP que contengan "eval("
            grep -rl 'eval(' /var/www/ --include="*.php"

            # Extraer emails de un archivo
            grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' archivo.txt

            # Listar usuarios con shell bash
            grep '/bin/bash$' /etc/passwd | cut -d: -f1

✂️ sed: el editor de flujo

sed (Stream EDitor) lee la entrada línea por línea, aplica transformaciones y produce una salida modificada. Es la herramienta de elección cuando necesitas sustituir, eliminar, insertar o transformar texto. Su operación más utilizada es la sustitución: sed 's/patrón/reemplazo/flags'.

Sustituciones

# Sustituir la primera ocurrencia en cada línea
            sed 's/pepe/Pepe/' archivo.txt

            # g: sustituir TODAS las ocurrencias en cada línea
            sed 's/pepe/Pepe/g' archivo.txt

            # i: sustituir ignorando mayúsculas/minúsculas
            sed 's/error/WARNING/gi' log.txt

            # -i: modificar el archivo in-place (¡cuidado!)
            sed -i 's/localhost/192.168.1.100/g' config.conf

            # -i.bak: modificar in-place creando backup
            sed -i.bak 's/localhost/192.168.1.100/g' config.conf

            # Usar ERE con -E
            sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2}/FECHA/g' archivo.txt

            # Delimitador alternativo (útil con rutas)
            sed 's|/usr/local/bin|/opt/bin|g' script.sh

            # & representa la coincidencia completa
            echo "hola mundo" | sed 's/[a-z]*/(&)/g'    # (hola) (mundo)

            # \1, \2: retroreferencias a grupos capturados
            echo "2026-02-26" | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
            # Resultado: 26/02/2026

Rangos y eliminación

# Eliminar líneas vacías
            sed '/^$/d' archivo.txt

            # Eliminar comentarios (líneas que empiezan por #)
            sed '/^#/d' config.conf

            # Eliminar espacios al inicio y al final de cada línea
            sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//' archivo.txt

            # Aplicar solo en un rango de líneas (3 a 10)
            sed '3,10s/foo/bar/g' archivo.txt

            # Aplicar solo en líneas que coincidan con un patrón
            sed '/^server/s/80/443/g' nginx.conf

            # Insertar texto antes de la línea 1
            sed '1i\# Archivo generado automáticamente' config.conf

            # Añadir texto después de la última línea
            sed '$a\# Fin del archivo' config.conf

⚡ awk: procesamiento avanzado de texto

awk es, en realidad, un lenguaje de programación completo especializado en el procesamiento de texto estructurado en campos. Mientras que grep busca y sed sustituye, awk extrae, calcula, transforma y formatea datos. Su nombre proviene de las iniciales de sus creadores: Alfred Aho, Peter Weinberger y Brian Kernighan.

El trío de procesamiento de texto en Linux grep 🔍 BUSCAR y FILTRAR • Encuentra líneas por patrón • Filtra coincidencias • Cuenta ocurrencias • Busca en directorios sed ✂️ SUSTITUIR y TRANSFORMAR • Reemplaza texto • Elimina líneas • Inserta contenido • Edición in-place awk ⚡ EXTRAER y CALCULAR • Extrae campos • Calcula y agrega • Formatea salida • Lógica condicional cat access.log | grep '404' | sed 's/HTTP.*//' | awk '{print $1, $7}' Ejemplo: extraer IP y ruta de todas las peticiones con error 404 El trío de procesamiento de texto en Linux grep 🔍 BUSCAR y FILTRAR • Encuentra líneas por patrón • Filtra coincidencias • Cuenta ocurrencias • Busca en directorios sed ✂️ SUSTITUIR y TRANSFORMAR • Reemplaza texto • Elimina líneas • Inserta contenido • Edición in-place awk ⚡ EXTRAER y CALCULAR • Extrae campos • Calcula y agrega • Formatea salida • Lógica condicional cat access.log | grep '404' | sed 's/HTTP.*//' | awk '{print $1, $7}' Ejemplo: extraer IP y ruta de todas las peticiones con error 404
Las tres herramientas fundamentales de procesamiento de texto en Linux y su función en el pipeline. Elaboración propia para Ciberaula.

Sintaxis fundamental de awk

La estructura de un programa awk es awk 'patrón { acción }' archivo. Por cada línea de entrada, awk la divide automáticamente en campos separados por espacios (o por el separador que indiques con -F). El primer campo es $1, el segundo $2, y así sucesivamente. $0 es la línea completa. NF es el número de campos y NR es el número de línea actual.

# Imprimir el primer campo (columna) de cada línea
            awk '{print $1}' archivo.txt

            # Cambiar separador de campos (-F para input, OFS para output)
            awk -F: '{print $1, $7}' /etc/passwd    # Usuario y shell

            # Filtrar: solo líneas donde el tercer campo sea mayor que 1000
            awk -F: '$3 > 1000 {print $1, $3}' /etc/passwd

            # Usar regex como patrón
            awk '/error/ {print NR, $0}' log.txt     # Líneas con "error" + nº línea

            # BEGIN y END: acciones antes/después de procesar
            awk 'BEGIN {total=0} {total+=$5} END {print "Total:", total}' datos.txt

            # Formatear salida con printf
            awk -F: '{printf "%-20s UID: %s\n", $1, $3}' /etc/passwd

            # Contar ocurrencias de cada valor en una columna
            awk '{count[$1]++} END {for (ip in count) print count[ip], ip}' access.log | sort -rn

            # Sumar tamaño de archivos por extensión
            ls -l | awk '{split($NF,a,"."); size[a[length(a)]]+=$5} END {for (ext in size) printf "%10d %s\n", size[ext], ext}'

🖥️ Expresiones regulares en Bash

Desde Bash 3.0, el operador =~ permite usar expresiones regulares directamente en condicionales. La regex se evalúa como ERE y el resultado se almacena en el array BASH_REMATCH, donde ${BASH_REMATCH[0]} es la coincidencia completa y ${BASH_REMATCH[1]}, ${BASH_REMATCH[2]}, etc., son los grupos capturados.

#!/bin/bash
            # Validar formato de email
            email="usuario@dominio.com"
            if [[ "$email" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
            echo "Email válido"
            fi

            # Extraer partes de un nombre de archivo
            archivo="backup_2026-02-26_servidor01.tar.gz"
            if [[ "$archivo" =~ backup_([0-9]{4}-[0-9]{2}-[0-9]{2})_(.+)\.tar\.gz ]]; then
            fecha="${BASH_REMATCH[1]}"      # 2026-02-26
            servidor="${BASH_REMATCH[2]}"   # servidor01
            echo "Backup del $fecha - Servidor: $servidor"
            fi

            # Validar dirección IP
            ip="192.168.1.100"
            if [[ "$ip" =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
            echo "Formato de IP válido"
            fi
⚠️ Importante: En Bash, la expresión regular del operador =~ NO debe ir entre comillas. Si la encierras entre comillas simples o dobles, Bash la interpreta como una cadena literal, no como una regex. Escribe [[ "$var" =~ ^[0-9]+$ ]], nunca [[ "$var" =~ "^[0-9]+$" ]].

🍳 Recetas prácticas: patrones del mundo real

Estas son expresiones regulares listas para usar en situaciones cotidianas de administración de sistemas Linux:

Análisis de logs

# Extraer todas las IPs únicas de un log de Apache
            grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort -u

            # Contar errores 5xx por hora
            grep -E '" 5[0-9]{2} ' access.log | awk '{print substr($4,2,14)}' | uniq -c

            # Encontrar intentos de login fallidos por SSH
            grep 'Failed password' /var/log/auth.log | grep -oE 'from [0-9.]+' | sort | uniq -c | sort -rn

Gestión de configuración

# Eliminar comentarios y líneas vacías de un archivo de config
            grep -vE '^(#|;|$)' config.conf | sed 's/#.*$//'

            # Cambiar el puerto en todos los archivos .conf de un directorio
            find /etc/nginx/ -name "*.conf" -exec sed -i 's/listen 80;/listen 443;/g' {} \;

            # Extraer pares clave=valor de un archivo .env
            grep -E '^[A-Z_]+=.+' .env | sed 's/=/ → /'

Validación de datos

# Validar fechas en formato dd/mm/yyyy
            grep -E '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)[0-9]{2}$'

            # Validar números de teléfono españoles
            grep -E '^(\+34)?[6-9][0-9]{8}$'

            # Encontrar URLs en un texto
            grep -oE 'https?://[a-zA-Z0-9./?=_%&-]+'

✏️ Ejercicios resueltos

Ejercicio 1: Dado el archivo /etc/passwd, muestra solo los usuarios cuyo nombre empieza por una letra entre «a» y «m» y cuyo UID (tercer campo) sea mayor que 500.

Ver solución
awk -F: '/^[a-m]/ && $3 > 500 {print $1, "UID:"$3}' /etc/passwd

Explicación: /^[a-m]/ filtra líneas que empiezan con letras a-m. $3 > 500 compara el UID numéricamente. El operador && combina ambas condiciones.

Ejercicio 2: En un archivo access.log, sustituye todas las direcciones IP por «[IP_ANONIMIZADA]» para crear una versión anonimizada del log.

Ver solución
sed -E 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[IP_ANONIMIZADA]/g' access.log > access_anonimizado.log

Explicación: el patrón captura cuatro grupos de 1-3 dígitos separados por puntos. La flag g asegura que se reemplacen todas las IPs de cada línea, no solo la primera.

Ejercicio 3: Escribe un script Bash que reciba un archivo como argumento y muestre: el número total de líneas, el número de líneas vacías, y el número de líneas que contienen la palabra «error» (sin distinguir mayúsculas).

Ver solución
#!/bin/bash
            archivo="$1"
            total=$(wc -l < "$archivo")
            vacias=$(grep -c '^$' "$archivo")
            errores=$(grep -ci 'error' "$archivo")
            echo "Total líneas: $total"
            echo "Líneas vacías: $vacias"
            echo "Líneas con 'error': $errores"

⚠️ Errores frecuentes y buenas prácticas

Olvidar las comillas simples. Si escribes grep [0-9]+ archivo sin comillas, el shell interpreta los caracteres especiales antes de pasarlos a grep. Usa siempre comillas simples: grep '[0-9]+' archivo. Las comillas simples impiden la expansión del shell.

Confundir globbing con regex. En el shell, * significa «cualquier secuencia de caracteres» (como en ls *.txt). En regex, * significa «cero o más repeticiones del carácter anterior». Son conceptos completamente diferentes. ls *.txt funciona, pero grep '*.txt' no hace lo que esperas.

No escapar el punto. El punto . en regex significa «cualquier carácter». Si buscas un punto literal (por ejemplo, en una extensión de archivo o una dirección IP), debes escaparlo: \.. La regex archivo.txt coincide con «archivo.txt» pero también con «archivoXtxt».

Usar BRE sin saberlo. Si usas grep o sed sin la opción -E, estás en modo BRE y necesitas escapar los metacaracteres: \+, \?, \(\), \{\}. El 90 % de los errores de «mi regex no funciona» se resuelven añadiendo -E.

Regex greedy que capturan de más. La regex .* captura la cadena más larga posible. Si quieres capturar hasta el primer delimitador, usa una clase negada en vez del punto: [^;]* captura hasta el primer punto y coma, mientras que .* captura hasta el último.

No probar con datos reales. Antes de aplicar una regex destructiva (especialmente con sed -i), prueba siempre sin la opción -i y examina la salida. Mejor aún, usa sed -i.bak para crear un backup automático. Un error en una regex con sed -i puede corromper archivos de configuración críticos sin posibilidad de recuperación.

💡 Consejo de oro: La herramienta grep --color=auto 'patrón' archivo resalta las coincidencias en color, lo que permite verificar visualmente qué está capturando tu regex antes de usarla en un contexto destructivo como sed. Define un alias en tu .bashrc: alias grep='grep --color=auto'.

❓ Preguntas frecuentes sobre Expresiones regulares en Linux: grep, sed y awk — Guía completa desde cero

Las dudas más comunes respondidas de forma clara y directa.

Son secuencias de caracteres que definen patrones de búsqueda. Permiten buscar, filtrar, extraer y transformar texto usando herramientas como grep, sed y awk. Son fundamentales para la administración de sistemas.
grep busca y filtra líneas por patrón. sed sustituye, elimina e inserta texto. awk extrae campos, calcula y formatea datos estructurados. Se complementan en pipelines.
BRE requiere escapar metacaracteres. ERE (grep -E, sed -E) no requiere escape y es la más recomendada. PCRE (grep -P) añade lookahead, lookbehind y clases abreviadas.
Con grep -i: grep -i 'error' archivo.log. Coincide con error, Error, ERROR y cualquier combinación.
Usa sed 's/viejo/nuevo/g' archivo. Con -i modifica el archivo directamente. Usa -i.bak para crear backup automático.
Sí, con el operador =~ dentro de [[ ]]. Los grupos capturados van en BASH_REMATCH. La regex no debe ir entre comillas.
Con grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort -u.
Valora este artículo

💬 Foro de discusión

¿Tienes dudas sobre Expresiones regulares en Linux: grep, sed y awk — Guía completa desde cero? Comparte tu pregunta con la comunidad.

¿Tienes cuenta? o comenta como invitado ↓

Todavía no hay mensajes. ¡Sé el primero en participar!

🚀 ¿Quieres dominar Linux profesionalmente?
Cursos bonificados por FUNDAE para empresas — formación 100% subvencionada
Ver cursos de Linux →