sed (informática)

lenguaje de programación
(Redirigido desde «Sed (Unix)»)


sed (stream editor) es un editor de flujo, una potente herramienta de tratamiento de texto para el sistema operativo Unix 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.

sed
Lee E. McMahon
Información general
Paradigma script
Apareció en 1973 - 1974
Diseñado por Lee E. McMahon
Última versión estable 4.8[1](15 de enero de 2020 (4 años, 2 meses y 12 días))
Influido por ed
Ha influido a Chomski, Perl, AWK
Esquema general del funcionamiento de sed

Historia editar

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).

Sintaxis editar

La sintaxis general de la orden 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 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 editar

Cambia todas las minúsculas a mayúsculas de archivo:

$ sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' archivo

Borra la 3ª línea de archivo:

$ sed '3d' 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):

$ sed 's/'''^['''\[[0-9]*m//g
      s/'''^['''\[[0-9]*w//g
      s/'''^M'''/\
 /g' archivo > archivo.nuevo

Determina si un número natural mayor o igual a 2, es primo:

$ echo 42 | sed -e 's/[0-9]/|0123456789n&/g; s/\(.\)[^n]*n\1//g
     :mult; s/[0-9]|/|0000000000/g; /[0-9]|/bmult
     s/[1-9]/0/g; s/|*/00|/; h
     :siguiente; s/\(0*\)|\1/|/; /|$/{s/.*/es primo/;q}; g
         :restar; s/^\(0*\)|\1/\1|/; trestar
         /|$/{ s/.*/no es primo/; q }
         g; s/^/0/; h
     bsiguiente'

Órdenes usuales de sed editar

  • a\: Tras terminar el ciclo de procesamiento del script sobre la línea actual, añade la línea especificada a continuación.
  • c\: Sustituye la línea actual por la especificada a continuación.
  • d: Borra la línea actual.
  • i\: Similar a a\, pero es insertada inmediatamente (sin esperar a finalizar el ciclo).
  • p: Imprime la línea actual, inclusive cuando se utiliza 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.
  • w archivo: Copia la línea en archivo.
  • =: Imprime el número de línea.
  • !orden: Aplica la orden si la condición previa al signo de admiración, no selecciona la línea actual.

Véase también editar

Referencias editar

  1. http://ftp.gnu.org/gnu/sed/
  2. a b c «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… ». 

Enlaces externos editar