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