Qué es sed
sed es un editor de flujo (stream editor). Lee la entrada línea por línea, aplica transformaciones y escribe el resultado en stdout. El uso más común es sustituir una cadena por otra, pero también puede eliminar líneas, imprimir líneas específicas y realizar transformaciones complejas de texto.
Sustitución básica
La sintaxis central es s/patrón/reemplazo/flags.
Reemplazar la primera ocurrencia de "foo" por "bar" en cada línea e imprimir en stdout:
sed 's/foo/bar/' archivo.txt
Reemplazar todas las ocurrencias (flag global g):
sed 's/foo/bar/g' archivo.txt
Editar archivos en el lugar
Por defecto sed escribe en stdout. Usá -i para editar el archivo directamente:
sed -i 's/foo/bar/g' archivo.txt
En macOS, -i requiere un argumento (usá -i '' para no hacer backup):
sed -i '' 's/foo/bar/g' archivo.txt
Crear un backup antes de editar:
sed -i.bak 's/foo/bar/g' archivo.txt
Esto genera archivo.txt (modificado) y archivo.txt.bak (original).
Sustitución sin distinguir mayúsculas
Agregá el flag I (GNU sed):
sed 's/error/ERROR/gI' archivo.txt
Eliminar líneas
Eliminar líneas que coincidan con un patrón:
sed '/^#/d' archivo.txt eliminar comentarios (que empiezan con #)
sed '/^$/d' archivo.txt eliminar líneas vacías
sed '5d' archivo.txt eliminar la línea 5
sed '2,8d' archivo.txt eliminar las líneas 2 a 8
Imprimir líneas específicas
Usá -n para suprimir la salida por defecto y p para imprimir solo lo que querés:
sed -n '10,20p' archivo.txt imprimir las líneas 10 a 20
sed -n '/error/p' archivo.txt imprimir solo las líneas con "error"
Múltiples expresiones
Aplicar varias sustituciones en un solo paso con -e:
sed -e 's/foo/bar/g' -e 's/baz/qux/g' archivo.txt
Uso con pipes
sed funciona de forma natural en pipelines:
cat /etc/os-release | sed 's/"//' | grep VERSION
journalctl -n 100 | sed '/^$/d'
grep "ERROR" app.log | sed 's/ERROR/[ERROR]/'
Ejemplos prácticos
Eliminar espacios al final de las líneas:
sed -i 's/[[:space:]]*$//' archivo.txt
Comentar una línea que contiene una cadena específica:
sed -i '/ServerName/s/^/#/' /etc/apache2/sites-enabled/000-default.conf
Reemplazar un valor en un archivo de configuración:
sed -i 's/^max_connections = .*/max_connections = 200/' /etc/mysql/my.cnf
Extraer líneas entre dos patrones:
sed -n '/START/,/END/p' archivo.txt
Ver también
man sed — referencia completa. Para transformaciones complejas de múltiples líneas, considerá awk o perl -pi -e.
- Creado: 16 de diciembre de 2007
- Última edición: 7 de julio de 2026