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 mostrando el resultado en pantalla. Sed permite manipular flujos de datos, como por ejemplo cortar líneas, buscar y reemplazar texto y muchas otras cosas. 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 los órdenes se tomarán de un archivo
Ejemplos de uso
Cambia todas las minúsculas a mayúsculas de archivo:
sed '1,$ s/[a-z]/[A-Z]/g' nombrearchivo
Borra la 3ª línea de archivo:
sed '3d' nombrearchivo
Añade una línea con el contenido “Línea insertada” después de cada línea del archivo:
sed 'a\Línea insertada' nombrearchivo
Ordenes usuales de sed
- a\ Añade al final de la línea.
- c\ Cambia el contenido del patrón.
- d Borra las líneas afectadas.
- g realiza sustituciones generales.
- i\ Inserta sobre los patrones afectados.
- 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.
- w archivo Copia la línea en archivo.
- = Imprime el número de línea.
- ! orden Aplica la orden si la línea no está seleccionada.
Pero porque decimos que es una PODEROSA herramienta, pongamos un ejemplo mas terrenal. Supongamos que tenemos un archivo de texto ejemplo.txt como el que sigue:
Este es un ejemplo de archivo que queremos arreglar Este archivo tiene un espacio entre cada linea que escribimos y deseamos eliminar estos espacios
Si quisiéramos eliminar los espacios entre lineas, la manera mas tradicional seria abrir el archivo con un editor y eliminar estos espacios en blanco a mano. Pero ¿¿que pasa si lo que tenemos en un archivo con 100 párrafos y sus correspondientes espacios en blanco??, entonces otra solución seria poner la opción reemplazar en el procesador de texto y eliminar esos espacios en blanco, pero el detalle esta en ¿¿que caracter es el que corresponde a un espacio en blanco (para pedirle al editor que lo busque) y cual corresponde a eliminar ese caracter (para pedirle al editor que lo reemplace por el de suprimir)??. Pues bien ese es uno de los inconvenientes de la opción reemplazar de muchos procesadores de texto.
Pero con SED es posible modificar esto que queremos de un plumazo, ¿como? de la siguiente forma, escribimos esto en la linea de comandos:
sed '/ *#/d; /^ *$/d' ejemplo.txt
y la salida del la linea de comandos seria algo asi:
mario@kinichahau:~/Desktop$ sed '/ *#/d; /^ *$/d' ejemplo.txt Este es un ejemplo de archivo que queremos arreglar Este archivo tiene un espacio entre cada linea que escribimos y deseamos eliminar estos espacios mario@kinichahau:~/Desktop$
Si lo que deseamos es guardar los cambios que se imprimen en pantalla en un archivo de texto entonces escribimos algo como esto
sed '/ *#/d; /^ *$/d' ejemplo.txt > salida.txt
Esto aun que parece algo sencillo de hacer (quitar los espacios en blanco) en realidad para cualquier procesador de textos comun se complica, intenten resolver este problema de quitar espacios en blanco y se darán cuenta por si solos.
Una referencia donde podrás conocer mas de SED, contiene un manual, AQUI, por alguna razón zonasiete.org ya no existe o esta fuera de linea, pero pude conseguir una copia de su manual.
Agrega un comentario