Sed (stream editor o editor de flujos) es un editor de texto que acepta como entrada un flujo (que puede ser la entrada estándar o un archivo), lo lee y modifica línea a línea mostrando el resultado en la salida estándar o pantalla (se puede redirigir la salida a un archivo mediante ">". No altera en ningún momento el archivo origen salvo que se indique mediante redirecciones. Posee muchas características de ed y ex. La sintaxis general del comando sed es:
sed [-n] [-e'script'] [-f archivo] archivo1 archivo2 ...
donde:-n : indica que se suprima la salida estándar.
-e : indica que se ejecute el script que viene a continuación. Si no se emplea la opción -f se puede omitir -e.
-f : indica que los comandos se tomarán de un archivo
Un script consiste en uno o varios comandos del editor (uno por línea) con la siguiente estructura:
[inicio[,fin]] funcion [argumentos]
donde inicio y fin hacen referencia a las líneas afectadas (número de línea o intervalo de líneas), función hace referencia al comando de editor a aplicar y argumentos hace referencia a los argumentos necesarios para la ejecución de la función.
El funcionamiento de sed consiste en leer una línea de la entrada y procesarla de acuerdo con las instrucciones especificadas presentando el resultado en la salida, a continuación vuelve a repetir el proceso para las siguientes líneas. Una de las ventajas principales de sed es que permite hacer cambios masivos en archivos de una forma relativamente sencilla, así como la aplicación de filtros sobre la marcha al tratar archivos.
Para expresar los comandos en varias líneas, al final de cada línea se debe añadir el carácter backslash (\) antes de pulsar el Return y aparecerá un prompt con el símbolo mayor que (>). De hecho muchas acciones habrá que realizarlas en varias líneas, como veremos a continuación.
a\ | Añade al final de las líneas con patrones afectados. Se necesitan varias líneas. |
c\ | Cambia el contenido de las líneas con patrones afectados. Se necesitan varias líneas. |
d | Borra las líneas afectadas. |
g | Realiza sustituciones generales. |
i\ | Inserta delante de las líneas con patrones afectados. Se necesitan varias líneas. |
p | Imprime las líneas afectadas, incluso con la opción -n. |
q | Abandona el proceso cuando se alcanza la línea especificada. |
r archivo | Lee un archivo, añadiendo su contenido a la salida. |
s | Sustituye las ocurrencias del patrón por lo indicado. |
w archivo | Copia la línea en archivo. |
y | Transforma el carácter correspondiente del origen en el correspondiente del destino. |
= | Imprime el número de línea. |
! comando | Aplica el comando si la línea no está seleccionada. |
Ejemplos:
sed 'y/abcdefghijklmnopqrstuvwxz/ABCDEFGHIJKLMNOPQRSTUVWXZ/' archivo | Cambia todas las minúsculas a mayúsculas de archivo. |
sed 's/ [ ]*/ /g' | Elimina todos los espacios duplicados en la línea. |
sed 's/A/B/4' | Sustituye la cuarta aparición de A por B. |
sed '3d' archivo | Borra la 3ª línea de archivo. |
sed 'a\Linea insertada' archivo | Añade una línea con el contenido "Línea insertada" después de cada línea del archivo. |
sed '$a\ ---------- Fin de Archivo' archivo | Añade la cadena al final del archivo |
sed '1,$ s/^[[\[0-9]m//g \
1,$ s/^[[\[0-9]w//g \ 1,$ s/^M/^J/g' archivo > archivo.nuevo | Elimina todas las secuencias de Escape del tipo Xm y Zm que se suelen usar para letras en negrita, etc. para vt100 y cambia el formato de los saltos de línea, de un archivo almacenando los resultados en un archivo nuevo. |
sed '1,3 c\ ----------' archivo | Cambia las 3 primeras líneas de archivo |
sed -n '/Total/p' archivo | Muestra solo aquellas líneas que contienen el patrón |
sed -n '1,20p' archivo | Muestra las líneas comprendidas entre la 1 y la 20. |
En caso de especificar los comandos a ejecutar en un archivo, y utilizarlo con la opción -f, el formato del archivo tendrá que ser del tipo:
1,5d s/juan/Juan/g s/$ // s/^ // $a\ FIN DEL ARCHIVO