Sed

De Wikiunix

Sed es un editor de flujos (stream editor) utilizado para el procesamiento de texto en ficheros. Utiliza un lenguaje de programación para realizar transformaciones en una emisión de datos leyendo línea por línea de estos. Fue desarrollado entre 1973 y 1974 por Lee E. McMahon de Bell Labs. Está incluido en las instalaciones básicas de prácticamente todas las distribuciones de GNU/Linux.

Ejemplos de uso de sed

Utilice Vi o Vim para crear el fichero prueba.txt:
vi prueba.txt

Ingrese el siguiente contenido y salga de vi:

Archivo: prueba.txt

Monstruo Espagueti Volador
Calle de los espagnósticos 123
Barrio de Espagnostia

Ciudad Pastafari, C.P. 123456


Si utiliza la orden cat sobre el fichero, visualizará tal cual el contenido de prueba.txt como fue ingresado en vi.
cat prueba.txt
Si se quiere convertir a doble espacio la salida del fichero prueba.txt, utilice el siguiente mandato:
sed G prueba.txt Monstruo Espagueti Volador Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456
Para guardar esta salida en el fichero usuario2.txt, utilice lo siguiente:
sed G prueba.txt > usuario2.txt
Si se quiere convertir a doble espacio la salida del fichero prueba.txt, utilice el siguiente mandato:
sed 'G;G' prueba.txt Monstruo Espagueti Volador Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456
Para guardar esta salida en el fichero usuario3.txt, utilice lo siguiente:
sed 'G;G' prueba.txt > usuario3.txt
El contenido de usuario3.txt tendrá triple espacio de separación. Si se desea convertir un fichero a doble espacio, pero que no haya más de una línea vacía entre cada línea con datos, se utiliza lo siguiente:
sed '/^$/d;G' usuario3.txt Monstruo Espagueti Volador Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456

Si se desea eliminar el doble espacio del fichero usuario2.txt, se utiliza lo siguiente:

sed 'n;d' usuario2.txt Monstruo Espagueti Volador Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456

Si se quiere agregar una línea en blanco arriba de toda línea que contenga la expresión regular <<espag>>, se utiliza lo siguiente:

sed '/espag/{x;p;x;}' prueba.txt Monstruo Espagueti Volador Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456

Si se quiere agregar una línea en blanco debajo de toda línea que contenga la expresión regular "3", se utiliza lo siguiente:

sed '/3/G' prueba.txt

Monstruo Espagueti Volador Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456

Si se quiere agregar una línea en blanco arriba y debajo de toda línea que contenga la expresión regular "3", se utiliza lo siguiente:

sed '/3/{x;p;x;G;}' prueba.txt

Monstruo Espagueti Volador Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456

Para reemplazar texto se utiliza el modelo 's/texto/nuevo-texto/' donde texto puede ser también una expresión regular. En el siguiente ejemplo se reemplazarán las incidencias del número por el número 9:

sed 's/3/9/g' prueba.txt Monstruo Espagueti Volador Calle de los espagnósticos 129 Barrio de Espagnostia Ciudad Pastafari, C.P. 129456

En el siguiente ejemplo se reemplazan los espacios por tabuladores a todo lo largo de todas las líneas:

sed 's/\ /\t/g' prueba.txt Monstruo Espagueti Volador Calle de los espagnósticos 129 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456
En el siguiente ejemplo se reemplazan solo el primer espacio de cada línea por un tabulador:
sed 's/\ /\t/' prueba.txt Monstruo Espagueti Volador Calle de los espagnósticos 129 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456
La siguiente línea añade 5 espacios al inicio de cada línea:
sed 's/^/ /' prueba.txt Monstruo Espagueti Volador Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456
El siguiente mandato solo imprime la primera línea del fichero prueba.txt:
sed q prueba.txt Monstruo Espagueti Volador
El siguiente mandato solo imprime las primeras dos líneas del fichero prueba.txt:
sed 2q prueba.txt Monstruo Espagueti Volador Calle de los espagnósticos 123

El siguiente mandato solo muestra las últimas tres líneas del fichero prueba.txt:

sed -e :a -e '$q;N;4,$D;ba' prueba.txt Calle de los espagnósticos 123 Barrio de Espagnostia Ciudad Pastafari, C.P. 123456
El siguiente mandato solo mostrará las líneas que incluyen "3":
sed '/3/!d' prueba.txt Calle de los espagnósticos 123 Ciudad Pastafari, C.P. 123456
El siguiente mandato solo mostrará las líneas que no incluyen 3:
sed '/3/d' prueba.txt Monstruo Espagueti Volador Barrio de Espagnostia
El siguiente mandato pide mostrar la linea que está inmediatamente después de la expresión Fulano, pero no la línea en si que incluye Fulano:
sed -n '/Fulano/{n;p;}' prueba.txt Calle de los espagnósticos 123
El siguiente mandato pide mostrar la linea que está inmediatamente antes de la expresión Calle, pero no la línea en si que incluye Calle:
sed -n '/Calle/{g;1!p;};h' prueba.txt Monstruo Espagueti Volador


Véase también

Bibliografía

  • Sed & Awk - Dale Dougherty and Arnold Robbins (O'Reilly, 1997, ISBN: 1-56592-225-5)
Herramientas personales