sed
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.
sed [opciones] SCRIPT [ARCHIVO...]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.
Despiece
6 ejemplosReemplazar una palabra y ver el resultado
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | sed | Comando | El editor de flujo. |
| 2 | 's/azul/rojo/g' | Valor | s es sustituir: cambia azul por rojo. La g final hace que cambie todas las apariciones de cada línea, no solo la primera. |
| 3 | colores.txt | Argumento | El archivo que lee. No se modifica. |
Muestra el contenido de colores.txt con rojo donde decía azul. El archivo queda igual.
Borrar la primera línea
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | sed | Comando | El editor de flujo. |
| 2 | '1d' | Valor | d es borrar (delete). El 1 indica que solo la línea 1. |
| 3 | datos.csv | Argumento | El archivo que lee. |
Muestra todo el archivo menos la primera línea. Útil para quitar el encabezado de un CSV.
Mostrar solo un rango de líneas
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | sed | Comando | El editor de flujo. |
| 2 | -n | Opción | No imprime nada por su cuenta. |
| 3 | '10,20p' | Valor | p es imprimir: muestra de la línea 10 a la 20. |
| 4 | app.log | Argumento | El archivo que lee. |
Imprime solo las líneas 10 a 20 de app.log.
Editar el archivo con respaldo
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | sed | Comando | El editor de flujo. |
| 2 | -i.bak | Opción | Guarda el cambio en el archivo y antes deja una copia llamada config.ini.bak. Va pegado, sin espacio. |
| 3 | 's/8080/9090/' | Valor | Cambia la primera aparición de 8080 por 9090 en cada línea. |
| 4 | config.ini | Argumento | El archivo que se modifica. |
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
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | sed | Comando | El editor de flujo. |
| 2 | -e | Opción | Agrega la primera instrucción. |
| 3 | '/^#/d' | Valor | Borra las líneas que empiezan con #. |
| 4 | -e | Opción | Agrega la segunda instrucción. |
| 5 | '/^$/d' | Valor | Borra las líneas vacías: ^ es el inicio y $ el final, sin nada en medio. |
| 6 | nginx.conf | Argumento | El archivo que lee. |
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
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | sed | Comando | El editor de flujo. |
| 2 | 's|/var/www|/srv/www|g' | Valor | Usa | como separador en lugar de /, así no tienes que escapar las diagonales de las rutas. |
| 3 | sitio.conf | Argumento | El archivo que lee. |
Muestra sitio.conf con /srv/www en lugar de /var/www.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -i--in-place | Guarda 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--quiet | No imprime cada línea automáticamente; solo lo que pidas con el comando p. |
| -e--expression | Agrega una instrucción. Sirve para aplicar varias en un solo comando. |
| -E--regexp-extended | Usa expresiones regulares extendidas, donde +, ? y los paréntesis funcionan sin escaparlos con \. Equivale a -r. |
Fallas comunes
| Falla | Remedio |
|---|---|
| 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. |
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 /.