Comandos LinuxExplicados en español
/
Ficha35 / 104
Categoría
Texto
Ejemplos
6
Ver también
grep · awk · tr · cat

sed

stream editor (editor de flujo)

Busca y reemplaza texto, o borra líneas, sin abrir el archivo en un editor.

Lee el texto línea por línea y le aplica las instrucciones que le das, como reemplazar una palabra o borrar ciertas líneas. Lo usas para cambiar un valor en un archivo de configuración, limpiar la salida de otro comando o hacer el mismo cambio en muchos archivos desde la terminal.

Sintaxissed [opciones] SCRIPT [ARCHIVO...]
Precaución

Con -i, sed sobrescribe el archivo original sin preguntar y sin dejar copia. Prueba primero el comando sin -i para ver el resultado en pantalla, o usa -i.bak para que guarde un respaldo.

§ 1

Despiece

6 ejemplos
Reemplazar una palabra y ver el resultado

Reemplazar una palabra y ver el resultado

3 piezas
Lámina01 / 06
Comandosed 's/azul/rojo/g' colores.txt
Piezas3
Escala1:1
N.ºPiezaTipoQué hace
1sedComandoEl editor de flujo.
2's/azul/rojo/g'Valors es sustituir: cambia azul por rojo. La g final hace que cambie todas las apariciones de cada línea, no solo la primera.
3colores.txtArgumentoEl archivo que lee. No se modifica.
Resultado

Muestra el contenido de colores.txt con rojo donde decía azul. El archivo queda igual.

Borrar la primera línea

3 piezas
Lámina02 / 06
Comandosed '1d' datos.csv
Piezas3
Escala1:1
N.ºPiezaTipoQué hace
1sedComandoEl editor de flujo.
2'1d'Valord es borrar (delete). El 1 indica que solo la línea 1.
3datos.csvArgumentoEl archivo que lee.
Resultado

Muestra todo el archivo menos la primera línea. Útil para quitar el encabezado de un CSV.

Mostrar solo un rango de líneas

4 piezas
Lámina03 / 06
Comandosed -n '10,20p' app.log
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1sedComandoEl editor de flujo.
2-nOpciónNo imprime nada por su cuenta.
3'10,20p'Valorp es imprimir: muestra de la línea 10 a la 20.
4app.logArgumentoEl archivo que lee.
Resultado

Imprime solo las líneas 10 a 20 de app.log.

Editar el archivo con respaldo

4 piezas
Lámina04 / 06
Comandosed -i.bak 's/8080/9090/' config.ini
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1sedComandoEl editor de flujo.
2-i.bakOpciónGuarda el cambio en el archivo y antes deja una copia llamada config.ini.bak. Va pegado, sin espacio.
3's/8080/9090/'ValorCambia la primera aparición de 8080 por 9090 en cada línea.
4config.iniArgumentoEl archivo que se modifica.
Resultado

config.ini queda con 9090 en lugar de 8080 y el original queda guardado en config.ini.bak. No imprime nada.

Borrar comentarios y líneas vacías

6 piezas
Lámina05 / 06
Comandosed -e '/^#/d' -e '/^$/d' nginx.conf
Piezas6
Escala1:1
N.ºPiezaTipoQué hace
1sedComandoEl editor de flujo.
2-eOpciónAgrega la primera instrucción.
3'/^#/d'ValorBorra las líneas que empiezan con #.
4-eOpciónAgrega la segunda instrucción.
5'/^$/d'ValorBorra las líneas vacías: ^ es el inicio y $ el final, sin nada en medio.
6nginx.confArgumentoEl archivo que lee.
Resultado

Muestra solo las líneas de configuración que realmente están activas. Los comentarios con espacios antes del # sí aparecen.

Reemplazar rutas usando otro separador

3 piezas
Lámina06 / 06
Comandosed 's|/var/www|/srv/www|g' sitio.conf
Piezas3
Escala1:1
N.ºPiezaTipoQué hace
1sedComandoEl editor de flujo.
2's|/var/www|/srv/www|g'ValorUsa | como separador en lugar de /, así no tienes que escapar las diagonales de las rutas.
3sitio.confArgumentoEl archivo que lee.
Resultado

Muestra sitio.conf con /srv/www en lugar de /var/www.

§ 2

Opciones

Las que sí vas a usar
OpciónQué hace
-i--in-placeGuarda los cambios en el mismo archivo en vez de mostrarlos en pantalla. Con -i.bak deja una copia del original con terminación .bak.
-n--quietNo imprime cada línea automáticamente; solo lo que pidas con el comando p.
-e--expressionAgrega una instrucción. Sirve para aplicar varias en un solo comando.
-E--regexp-extendedUsa expresiones regulares extendidas, donde +, ? y los paréntesis funcionan sin escaparlos con \. Equivale a -r.
§ 3

Fallas comunes

FallaRemedio
Usar -i directo y perder el archivo original.Primero corre el comando sin -i para revisar la salida. Cuando estés seguro, agrega -i, o -i.bak para tener respaldo.
Esperar que s/viejo/nuevo/ cambie todas las apariciones.Sin la g final solo cambia la primera de cada línea. Usa s/viejo/nuevo/g.
Escribir el script entre comillas dobles y que el shell lo altere.Con comillas dobles el shell interpreta $ y otros símbolos antes de que lleguen a sed. Usa comillas simples salvo que necesites meter una variable.
Copiar sed -i '' de un tutorial de macOS.Ese formato es del sed de BSD. En Linux (GNU sed) se usa solo -i, o -i.bak para respaldo. Con -i '' GNU sed toma '' como el script y responde can't read s/...: No such file or directory.
§ 4

Preguntas frecuentes

¿Cómo reemplazar texto en un archivo con sed?
Usa sed -i 's/viejo/nuevo/g' archivo.txt. La -i guarda el cambio en el archivo y la g cambia todas las apariciones de cada línea. Si quieres respaldo, usa -i.bak.
¿Cómo borrar una línea con sed?
Con el comando d. sed '5d' archivo.txt quita la línea 5 y sed '/DEBUG/d' archivo.txt quita todas las que contienen DEBUG. Agrega -i para que el cambio se guarde.
¿Cuál es la diferencia entre sed y grep?
grep solo busca y muestra las líneas que coinciden. sed también puede cambiarlas, borrarlas o insertar texto.
¿Para qué sirve sed -n?
Evita que sed imprima todas las líneas. Se combina con p para mostrar solo lo que te interesa, como sed -n '10,20p' archivo.txt.
¿Cómo reemplazar una ruta con diagonales en sed?
Cambia el separador por otro carácter, como | o #: sed 's|/ruta/vieja|/ruta/nueva|g' archivo. Así no tienes que escapar cada /.
§ 5

Ver también