Sed es un editor de emisiones (stream editor en inglés) usado para procesar texto en archivos que fue desarrollado por Lee E. McMahon de los Laboratios Bell (Bell Labs) entre 1973 y 1974. Sed utiliza un lenguaje de programación para realizar transformaciones en una emisión de datos leyendo línea por línea de estos. Es muy funcional para realizar labores masivas o ediciones en bloque a archivos de texto, si el archivo de texto es de un tamaño considerablemente grande, la velocidad de edición de sed es sumamente conveniente.
Si quisieramos escribir la salida en un archivo tendríamos que utilizar el direccionamiento > para que la salida estándar sea escrita en el archivo que le indiquemos.
Expresiones regulares
Estas son las expresiones regulares más usadas para poder usar con nuestros scripts:
c Un carácter simple, si no es espcial es comparado con el texto * Una secuencia de 0 o más repeticiones \+ Como * de 1 o más \? Como * solo para 0 ó 1 \{i\} Como * solo cuando coincide exactamente i ocurrencias \{i,j\} Entre i y j secuencias \{i,\} Más o igual que i secuencias \{,j\} Menos o igual que j secuencias [lista] Cualquier carácter en la lista [^lista] Cualquier carácter que no esté en la lista
Mostrando datos
Mostramos las líneas donde aparezca la palabra "Coliflor":
sed '/coliflor/!d' mi_fichero.txt
Mostramos las líneas donde no aparezca la palabra "Coliflor":
sed '/coliflor/d' mi_fichero.txt
Mostramos la línea número 2 de un fichero:
$ sed -n 2p fichero.txt
Mostramos la línea número 2 y la número 3 de un fichero:
$ sed -n 2,3p fichero.txt
Interactuando con los datos
Añadir un espacio entre las líneas del fichero:
sed G fichero.txt
Añadir 3 espacios entre las líneas del fichero:
sed 'G;G;G;' fichero.txt
Reemplazo y manipulación de los datos
Para reemplazar, usaremos la siguiente estructura: s/cadena1/cadena2/parametros. Los parámetros pueden ser un número, es decir, el número de veces que queremos que una cadena sea reemplazada, o puede ser g (global) para hacerlo en todo el documento.
Reemplazar la palabra "coliflor" por "mermelada":
sed "s/coliflor/mermelada/" fichero.txt
Reemplazar la palabra "coliflor" por "mermelada" en un comando que le decimos primero desde la línea de comando y lo pasamos a través de un pipe:
$ echo me gusta mucho la coliflor |sed "s/coliflor/mermelada/"
Si queremos añadir la palabra "coliflor" al principio del fichero:
$ sed "s/^/coliflor/" fichero.txt
Eliminación y filtrado de datos
Eliminar líneas vacías
sed '/^$/d' mi_fichero.txt
Eliminar líneas que contengan la palabra "Coliflor":
$ sed '/Coliflor/d' mi_fichero.txt
Eliminar la línea número 2 de un fichero:
$ sed 2d mi_fichero.txt
Enlaces de interés
Página de Sed en la Wikipedia:
http://es.wikipedia.org/wiki/Sed_%28inform%C3%A1tica%29