Linux / Comando sed: buscar y reemplazar texto
sed es un editor de flujos de texto que lee la entrada línea por línea y aplica reglas de edición para producir un resultado. Es adecuado para transformaciones de texto repetitivas como sustituciones, selección de líneas específicas y eliminación.
La ejecución básica no modifica el original y emite los resultados de la transformación a la salida estándar. La forma del comando de sustitución es s/patrón/reemplazo/modificadores, y si se agrega g se reemplazan todas las coincidencias en una línea.
Sintaxis básica
sed [opciones] 'instrucciones' [archivo ...]
La implementación instalada y las opciones pueden variar según la distribución. Verifique la descripción de man sed en el sistema actual.
Comparar el original, la salida, la copia de seguridad y la restauración con los mismos datos
El bloque siguiente solo crea archivos de ejemplo en un nuevo directorio temporal y se ejecuta dentro de los paréntesis. No sobrescribe archivos en el directorio de trabajo existente y muestra la ubicación de los datos en la última línea. Los nombres de archivo utilizados en la sintaxis de los comandos se preparan dentro de este bloque, por lo que ejecute todo el bloque junto. Después de verificar los resultados, elimine únicamente los archivos de práctica cuando ya no los necesite.
(
set -eu
labdir=$(mktemp -d)
cd "$labdir"
printf 'red car\nred red\n' > config.txt
sed 's/red/green/' config.txt > first.txt
sed 's/red/green/g' config.txt > all.txt
cat config.txt first.txt all.txt
cp config.txt editable.txt
sed -i.bak 's/red/green/g' editable.txt
diff -u editable.txt.bak editable.txt || test "$?" -eq 1
cmp config.txt editable.txt.bak
cp editable.txt.bak editable.txt
cmp config.txt editable.txt
printf 'Lab files: %s\n' "$labdir"
)
El original permanece como red car·red red y la primera sustitución es green car·green red, la sustitución completa es green car·green green. La opción -i.bak de GNU sed modifica editable.txt y conserva el contenido anterior en un archivo .bak. El estado de salida 1 de diff significa que hay diferencias, lo que indica una comparación correcta, y cmp exitoso significa que el contenido de la copia de seguridad y la restauración es igual al original. La sintaxis -i de otras implementaciones, como BSD, debe verificarse por separado y no se deben confundir expresiones regulares como .* con cadenas simples.
Opciones y formatos principales
| Opciones·Formato | Descripción |
|---|---|
-n |
Se desactiva la salida automática básica. |
-e script |
Se especifican varios comandos de edición. |
-E |
Se utilizan expresiones regulares extendidas. |
-i[sufijo] |
La implementación de GNU edita archivos in situ y hace copias de seguridad de forma opcional. |
Precauciones al usar
sed -i modifica realmente el archivo, por lo que se recomienda usar un sufijo de respaldo para archivos importantes y revisar los resultados. La sintaxis -i de GNU y BSD es diferente. También se deben considerar las comillas del shell y los caracteres especiales de las expresiones regulares.
Preguntas frecuentes
¿Cambiará el archivo original si solo se ejecuta sed?
No. Por defecto, sed envía el resultado a la salida estándar sin modificar el archivo de entrada. La opción -i sí edita ese archivo; guardar la salida en otro archivo conserva el original.
Documentación oficial
Se pueden consultar el comportamiento exacto de las opciones y las diferencias entre implementaciones en la documentación oficial de sed.




