sed (stream editor) es un editor de flujo, una potente herramienta de tratamiento de texto para el sistema operativoUnix que acepta como entrada un archivo, lo lee y modifica línea a línea de acuerdo a un script, mostrando el resultado por salida estándar (normalmente en pantalla, a menos que se realice una redirección). Sed permite manipular flujos de datos, como por ejemplo cortar líneas, buscar y reemplazar texto (con soporte de expresiones regulares), entre otras cosas. Posee muchas características de ed y ex.
Historia
El comando sed, una de las utilidades Unix pioneras en el proceso de archivos de datos desde línea de comandos, surge en la versión 7 de Unix y evoluciona como sucesor natural del popular comando grep.[2] La motivación original consistía en crear un comando análogo de grep (g/re/p) para sustituir (g/re/s).Al prever la aparición de programas especializados para cada comando —como g/re/d—, McMahon escribe un editor de flujo de propósito general orientado a líneas que acaba por convertirse en sed.[2]
La sintaxis sed, en concreto, la barra inclinada / para buscar patrones y la sintaxis s/// para sustituirlos, tiene su origen en ed, precursor de sed, editor de uso común en la época.[2] La sintaxis de las expresiones regulares de sed influirá más tarde en otros lenguajes, en particular ECMAScript y Perl. Con el posterior desarrollo de AWK, herramienta prima de sed por funcionamiento, aunque más potente, se posibilita el procesamiento de texto potente desde scripts de consola. Se suele citar a sed y AWK como los padres de Perl, en cuya sintaxis y semántica influyeron (sobre todo en los operadores de búsqueda y sustitución de patrones).
-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 las órdenes se tomarán de un archivo
Un script consiste en una o varias órdenes del editor (uno por línea o separados por ";") con la siguiente estructura:
[inicio[,fin]] función[argumentos]
donde inicio y fin hacen referencia a las líneas (número de línea) afectadas (o intervalo de líneas); función hace referencia a la orden de editor a aplicar y argumentos hace referencia a los argumentos necesarios para la ejecución de la función.
Para expresar las órdenes en varias líneas es posible utilizar comillas o apóstrofos, u opcionalmente añadir el carácter barra invertida "\" antes de pulsar Intro.
Ejemplos de uso
Cambia todas las minúsculas a mayúsculas de archivo:
Añade una línea con el contenido "Línea insertada" después de cada línea del archivo:
$sed'a\ Línea insertada'archivo
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 (^[ representa al carácter de escape, ingresable por medio de control V + escape, y ^M representa al carácter de retorno de carro):
↑ abc«On the Early History and Impact of Unix». «A while later a demand arose for another special-purpose program, gres, for substitution: g/re/s. Lee McMahon undertook to write it, and soon foresaw that there would be no end to the family: g/re/d, g/re/a, etc. As his concept developed it became sed…».