Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Introducción a sed

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2014 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Acerca de sed.

Sed es un editor de emisiones (stream editor) utilizado para el procesamiento de texto en archivos. 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.

Procedimientos.

A continuación se mostrarán ejemplos del uso de sed.

Utilice vi para crear el archivo usuario.txt:

vi usuario.txt

Ingrese lo siguiente:

Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456

Guarde el archivo y salga de vi.

Ejecute cat con el nombre de este archivo como argumento para visualizar el contenido del archivo usuario.txt:

cat usuario.txt

Ejecute lo siguiente para convertir a doble espacio la salida del archivo usuario.txt:

sed G usuario.txt

La salida devolverá lo siguiente:

Fulano Algo

Calle Mengana 123

Colonia Perengana

Ciudad de Zutano, C.P. 123456

Ejecute lo siguiente para guardar esta salida en el archivo usuario2.txt:

sed G usuario.txt > usuario2.txt

Ejecute lo siguiente para convertir a doble espacio la salida del archivo usuario.txt:

sed 'G;G' usuario.txt

La salida devolverá lo siguiente:

Fulano Algo


Calle Mengana 123


Colonia Perengana


Ciudad de Zutano, C.P. 123456


Ejecute lo siguiente para guardar esta salida en el archivo usuario2.txt:

sed 'G;G' usuario.txt > usuario3.txt

Lo anterior mostrará que el contenido de usuario3.txt con triple espacio de separación.

Ejecute lo siguiente para convertir un archivo a doble espacio, pero sin que exista más de una línea vacía entre cada línea con datos:

sed '/^$/d;G' usuario3.txt

La salida devolverá lo siguiente:

Fulano Algo

Calle Mengana 123

Colonia Perengana

Ciudad de Zutano, C.P. 123456

Ejecute lo siguiente para eliminar el doble espacio del archivo usuario2.txt:

sed 'n;d' usuario2.txt

La salida devolverá lo siguiente:

Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456

Ejecute lo siguiente para agregar una línea en blanco arriba de toda línea que contenga la expresión regular enga:

 sed '/enga/{x;p;x;}' usuario.txt

La salida devolverá lo siguiente:

Fulano Algo

Calle Mengana 123

Colonia Perengana
Ciudad de Zutano, C.P. 123456

Ejecute lo siguiente para agregar una línea en blanco debajo de toda línea que contenga la expresión regular 3:

sed '/3/G' usuario.txt

La salida devolverá lo siguiente:

Fulano Algo
Calle Mengana 123

Colonia Perengana
Ciudad de Zutano, C.P. 123456

Ejecute lo siguiente para agregar una línea en blanco arriba y debajo de toda línea que contenga la expresión regular 3:

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

La salida devolverá lo siguiente:

Fulano Algo

Calle Mengana 123

Colonia Perengana

Ciudad de Zutano, 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' usuario.txt

La salida devolverá lo siguiente:

Fulano Algo
Calle Mengana 129
Colonia Perengana
Ciudad de Zutano, 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' usuario.txt

La salida devolverá lo siguiente:

Fulano  Algo
Calle	Mengana	123
Colonia	Perengana
Ciudad	de Zutano,	C.P.	123456

En el siguiente ejemplo se reemplazará sólo el primer espacio de cada línea por un tabulador:

sed 's/\ /\t/' usuario.txt

La salida devolverá lo siguiente:

Fulano	Algo
Calle	Mengana 123
Colonia Perengana
Ciudad	de Zutano, C.P. 123456

Ejecute lo siguiente para añadir 5 espacios al inicio de cada línea:

sed 's/^/     /' usuario.txt

La salida devolverá lo siguiente:

     Fulano Algo
     Calle Mengana 123
     Colonia Perengana
     Ciudad de Zutano, C.P. 123456

Ejecute lo siguiente para mstrar en pantalla sólo la primera línea del archivo usuario.txt:

sed q usuario.txt

La salida devolverá lo siguiente:

Fulano Algo

Ejecute lo siguiente para mostrar en pantalla sólo las primeras dos líneas del archivo usuario.txt:

sed 2q usuario.txt

La salida devolverá lo siguiente:

Fulano Algo
Calle Mengana 123

Ejecute lo siguiente para mostrar en pantalla sólo las últimas tres líneas del archivo usuario.txt:

sed -e :a -e '$q;N;4,$D;ba' usuario.txt

La salida devolverá lo siguiente:

Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456

Ejecute lo siguiente para mostrar sólo las líneas que incluyen 3:

sed '/3/!d' usuario.txt

La salida devolverá lo siguiente:

Calle Mengana 123
Ciudad de Zutano, C.P. 123456

Ejecute lo siguiente para mostrar sólo las líneas sin 3:

sed '/3/d' usuario.txt

La salida devolverá lo siguiente:

Fulano Algo
Colonia Perengana

Ejecute lo siguiente para mostrar la línea que está inmediatamente después de la expresión Fulano, pero excluyendo la línea que incluye Fulano:

sed -n '/Fulano/{n;p;}' usuario.txt

La salida devolverá lo siguiente:

Calle Mengana 123

Ejecute lo siguiente para mostrar la línea que está inmediatamente antes de la expresión Calle, pero excluyendo la línea que incluye Calle:

sed -n '/Calle/{g;1!p;};h' usuario.txt

La salida devolverá lo siguiente:

Fulano Algo

Bibliografía.

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 14/09/2016, 22:44|Hits: 15,147 Ver la versión para imprimir