SED

 

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.

Comandos usuales de sed

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.
dBorra las líneas afectadas.
gRealiza sustituciones generales.
i\Inserta delante de las líneas con patrones afectados. Se necesitan varias líneas.
pImprime las líneas afectadas, incluso con la opción -n.
qAbandona el proceso cuando se alcanza la línea especificada.
r archivoLee un archivo, añadiendo su contenido a la salida.
sSustituye las ocurrencias del patrón por lo indicado.
w archivoCopia la línea en archivo.
yTransforma el carácter correspondiente del origen en el correspondiente del destino.
=Imprime el número de línea.
! comandoAplica el comando si la línea no está seleccionada.

Ejemplos:

sed 'y/abcdefghijklmnopqrstuvwxz/ABCDEFGHIJKLMNOPQRSTUVWXZ/' archivoCambia 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' archivoBorra la 3ª línea de archivo.
sed 'a\Linea insertada' archivoAñ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' archivoMuestra solo aquellas líneas que contienen el patrón
sed -n '1,20p' archivoMuestra 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