Introduccion a SED
Acerca de sed.
Sed es un editor de emisiones (stream editor) utilizado para el procesamiento de texto archivos. Utiliza un lenguaje de programación para realizar transformaciones en una emisión datos leyendo línea por línea de estos. Fue desarrollado entre 1973 y 1974 por Lee E. McMahon Bell Labs. Está incluido en las instalaciones básicas de prácticamente todas las distribuciones GNU/Linux.
Procedimientos.
A continuación les mostrare ejemplos del uso de sed.
Utilizaremos vi o nano (u otro editor) para crear el archivo usuario.txt:
vi usuario.txt
Ingresaremos el siguiente contenido al archivo usuario.txt:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
Si utilizamos el comando cat sobre el archivo, visualizaremos tal cual el contenido de usuario.txt como fue ingresado en el editor de texto.
cat usuario.txt
Si queremos convertir a doble espacio la salida del archivo usuario.txt, utilizaremos el siguente comando:
sed G usuario.txt
El comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
Para guardar la salida anterior en el archivo usuario2.txt, utilizaremos el siguiente comando:
sed G usuario.txt > usuario2.txt
Si queremos convertir a doble espacio la salida del archivo usuario.txt, utilizaremos el siguiente comando:
sed 'G;G' usuario.txt
La salida anterior devolvera lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
Para guardar la salida anterior en el archivo usuario3.txt, utilizaremos el siguiente comando:
sed 'G;G' usuario.txt > usuario3.txt
El contenido de usuario3.txt tendra triple espacio de separacion. Si deseamos convertir un archivo a doble espacio, pero que no haya mas de una linea vacia entre cada linea con datos, se utiliza lo siguiente:
sed '/^$/d;G' usuario3.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
Si deseamos eliminar el doble espacio del archivo usuario2.txt, utilizaremos el siguiente comando:
sed 'n;d' usuario2.txt
La salida anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
Si deseamos agregar una linea en blanco arriba de toda linea que contenga la expresion regular enga, utilizaremos lo siguiente:
sed '/enga/{x;p;x;}' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
Si queremos agregar una linea en blanco debajo de toda linea que contenga el expresion regular 3, utilizaremos el siguiente comando:
sed '/3/G' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
Si queremos agregar una linea en blanco arriba y debajo de toda linea que contenga la exprecion regular 3, utilizaremos el siguiente comando:
sed '/3/{x;p;x;G;}' usuario.txt
La salida del comando anterior mostrara 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 tambien una expresion regular. En el siguiente ejemplo se reemplazaran las incidencias del numero 3 por el numero 9:
sed 's/3/9/g' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 129
Colonia Perengana
Ciudad de Zutano, C.P. 129456
Con el siguiente ejemplo se reemplazaran los espacios por los tabuladores a todo lo largo de todas las lineas:
sed 's/ /t/g' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
Con el siguiente ejemplo reemplazaremos solo el primer espacio de cada linea por un tabulador:
sed 's/ /t/' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
La siguiente linea añade 5 espacios al inicio de cada linea:
sed 's/^/ /' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
El siguiente comando solo mostrara la primera linea del archivo usuario.txt:
sed q usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
El siguiente comando solo mostrara las primeras 2 lineas del archivo usuario.txt:
sed 2q usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Calle Mengana 123
El siguiente comando nos mostrara las ultimas 3 lineas del archivo usuario.txt:
sed -e :a -e '$q;N;4,$D;ba' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456
El siguiente comando nos mostrara las lineas que incluyen 3:
sed '/3/!d' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Calle Mengana 123
Ciudad de Zutano, C.P. 123456
El siguiente comando nos mostrara las lineas que no incluyen 3:
sed '/3/d' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Colonia Perengana
El siguiente comando nos mostrara la linea que esta despues de la expresion Fulano, pero no mostrara la linea que incluye Fulano:
sed -n '/Fulano/{n;p;}' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Calle Mengana 123
El siguiente comando nos mostrara la linea que esta antes de la expresion Calle, pero no mostrara la linea que incluye Calle:
sed -n '/Calle/{g;1!p;};h' usuario.txt
La salida del comando anterior mostrara lo siguiente:
Fulano Algo
Aclaracion: Toda la informacion que cito en los post "Introduccion a sed" y "Introduccion a AWK" la he obtenido del siguiente libro:
Administracion de Servidores pdf