Hoja de Referencia de Procesamiento de Texto en Linux
Estás mirando un archivo de registro de 2GB, buscando llamadas API fallidas de la última hora. O tal vez necesitas extraer direcciones de correo electrónico de una exportación CSV. Estas tareas no deberían requerir escribir un script de Python.
Esta hoja de referencia cubre comandos esenciales de procesamiento de texto en Linux—grep, awk, sed, y sus contrapartes modernas—con ejemplos prácticos para flujos de trabajo cotidianos de desarrollo frontend y full-stack.
Puntos Clave
grepyripgrepson tus herramientas principales para buscar texto en archivos, con ripgrep ofreciendo mejoras de velocidad y reconocimiento de.gitignorepara bases de código grandes.sedmaneja operaciones de búsqueda y reemplazo basadas en flujos, pero ten cuidado con las diferencias de comportamiento entre las versiones GNU y BSD.awksobresale en el procesamiento orientado a columnas para registros, CSVs y otros textos estructurados.jqllena el vacío quegrepyawkdejan al trabajar con datos JSON.- El operador pipe (
|) es el pegamento que encadena estos comandos en pipelines potentes y componibles.
Comandos Básicos de Búsqueda: grep y ripgrep
grep busca patrones en archivos y muestra las líneas coincidentes. Es la base de cualquier pipeline de procesamiento de texto.
# Basic pattern search
grep "error" server.log
# Case-insensitive search
grep -i "warning" app.log
# Show line numbers
grep -n "TODO" src/*.js
# Invert match (lines NOT containing pattern)
grep -v "debug" output.log
# Extended regex (-E enables +, ?, |, and grouping)
grep -E "error|warning|fatal" app.log
# Count matches only
grep -c "404" access.log
ripgrep (rg) es una alternativa más rápida que respeta .gitignore por defecto:
# Recursive search (default behavior)
rg "useState" ./src
# Search specific file types
rg -t js "async function"
# Show context around matches
rg -C 3 "Exception" logs/
Para bases de código grandes, ripgrep típicamente se ejecuta de 2 a 5 veces más rápido que grep y omite archivos irrelevantes automáticamente.
Transformación de Texto con sed
sed realiza edición de flujos—operaciones de búsqueda y reemplazo sin abrir un archivo en un editor.
# Replace first occurrence per line
sed 's/http/https/' urls.txt
# Replace all occurrences (global flag)
sed 's/old/new/g' config.txt
# Delete lines matching pattern
sed '/^#/d' config.ini
# In-place editing (GNU sed)
sed -i 's/localhost/127.0.0.1/g' .env
# macOS/BSD requires an empty backup extension
sed -i '' 's/localhost/127.0.0.1/g' .env
Nota: El comportamiento de la bandera
-idifiere entre GNU sed y BSD sed. En macOS, incluye siempre una cadena vacía (-i '') o especifica una extensión de respaldo (por ejemplo,-i .bak).
Procesamiento de Columnas con awk
awk sobresale con texto estructurado—registros, CSVs y datos delimitados por espacios en blanco. POSIX awk maneja la mayoría de las tareas comunes de manera portable.
# Print specific columns
awk '{print $1, $4}' access.log
# Custom field separator (CSV)
awk -F',' '{print $2}' data.csv
# Filter by condition
awk '$3 > 500 {print $1, $3}' response_times.log
# Sum a column
awk '{sum += $2} END {print sum}' sales.csv
# BEGIN/END blocks for headers
awk 'BEGIN {print "User\tCount"} {print $1, $2}' stats.txt
Comandos de Soporte Esenciales
# Sort and deduplicate (with counts, descending)
sort access.log | uniq -c | sort -rn
# Extract columns by delimiter
cut -d',' -f1,3 users.csv
# Character translation (lowercase to uppercase)
tr '[:lower:]' '[:upper:]' < input.txt
# Count lines in a file
wc -l package.json
# Find files by name pattern
find ./src -name "*.test.js" -type f
Discover how at OpenReplay.com.
Procesamiento de JSON con jq
Para el desarrollo web moderno, jq maneja el análisis de JSON que grep y awk no pueden gestionar limpiamente:
# Extract a field
jq '.data.users' response.json
# Filter array elements
jq '.items[] | select(.status == "active")' data.json
# Format API response
curl -s https://api.example.com/users | jq '.[].email'
Nota que el primer ejemplo anterior evita un uso innecesario de cat. jq puede leer archivos directamente, por lo que cat response.json | jq '...' es innecesario.
Ejemplos Prácticos de Pipelines
Filtrar errores de hoy de los registros:
grep "$(date +%Y-%m-%d)" app.log | grep -i error | awk '{print $4, $5}'
Extraer direcciones IP únicas:
awk '{print $1}' access.log | sort -u
Encontrar los archivos más grandes en un proyecto por conteo de líneas:
find . -type f -name "*.js" -exec wc -l {} + | sort -rn | head -10
Limpiar datos CSV (extraer columnas, eliminar comillas, deduplicar):
cut -d',' -f2,4 export.csv | sed 's/"//g' | sort -u
Referencia Rápida
| Tarea | Comando |
|---|---|
| Buscar un patrón | grep "pattern" file |
| Búsqueda recursiva rápida | rg "pattern" |
| Reemplazar texto | sed 's/old/new/g' file |
| Extraer columnas | awk '{print $1}' file |
| Analizar JSON | jq '.key' file.json |
| Ordenar y deduplicar | sort -u file |
| Contar líneas | wc -l file |
Conclusión
Domina estos comandos de procesamiento de texto en Linux y manejarás la mayoría de las tareas de análisis de registros, extracción de datos y transformación de archivos directamente desde la terminal. Comienza con grep para buscar, agrega awk para trabajo con columnas, y recurre a jq cuando esté involucrado JSON. El operador pipe (|) une todo, permitiéndote componer comandos pequeños y enfocados en pipelines que rivalizan con scripts dedicados.
Preguntas Frecuentes
Usa cut cuando tus datos tengan un delimitador consistente de un solo carácter y solo necesites obtener campos específicos. Recurre a awk cuando necesites filtrar filas por condición, realizar operaciones aritméticas o manejar espacios en blanco irregulares. awk trata espacios en blanco consecutivos como un solo delimitador por defecto, lo que lo hace más tolerante con archivos de registro y salida de comandos.
Para la mayoría de los flujos de trabajo de desarrolladores, sí. ripgrep es más rápido, respeta .gitignore y usa valores predeterminados sensatos como la búsqueda recursiva. Sin embargo, grep está disponible en prácticamente todos los sistemas Unix por defecto, lo que lo hace la opción más segura para scripts de shell portables. Si estás escribiendo scripts destinados a ejecutarse en servidores o contenedores mínimos, quédate con grep.
Siempre prueba tu comando sed sin la bandera -i primero para previsualizar la salida en tu terminal. Cuando estés listo para editar in situ, usa una extensión de respaldo como sed -i .bak en sistemas GNU. En macOS o BSD, la sintaxis es sed -i .bak. Esto crea una copia del archivo original antes de aplicar los cambios, dándote una opción de reversión.
Sí. jq está diseñado para navegar estructuras profundamente anidadas. Usa notación de punto para recorrer objetos, notación de corchetes para arrays y expresiones pipe para encadenar filtros. Por ejemplo, jq '.data.users[] | select(.active == true) | .email' entra en un array anidado, filtra por una condición y extrae un campo, todo en un solo comando.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.