Introducción a sed I

Otro más de mis favoritos en la consola de GNU/Linux: sed. Este Stream EDitor es similar a grep, salvo que puede hacer afectaciones a los archivos (no por defecto). No todas las expresiones regulares de grep funcionan transparentemente en sed, así que es buena idea acostumbrarse a cada uno. Conociendo la sintaxis y los modificadores no hay cosa que se le resista.

No pretendo hacer una extensiva introducción a sed. Quiero que sea una receta rápida a las cosas que se pueden realizar con éste.

Es importante que sepan que a diferencia de un bash script común y corriente, donde todas las instrucciones se ejecutan secuencialmente. Sed aplica todas las expresiones/instrucciones a la misma línea del archivo objetivo y hasta que no se apliquen la totalidad no continua con las subsecuentes líneas. Por supuesto, que las líneas que no empaten se mantendrán sin modificación alguna. 

Los patrones/regex siempre van entre diagonales (/regex/).

La manera simple en que pueden validar sus coincidencias es haciendo una substitución y la impresión de sólo las líneas del archivo que sufrieron un cambio. La siguiente instrucción remplaza con asteriscos el nombre de Antonio y lo muestra en pantalla.

sed -n 's/Antonio/*************/p'file

Salida
3344511,La Sombra Del Caudillo,Martín Luis Guzmán,"Guzmán, Martín Luis",************* Castro Leal,"=""970071862X""","=""9789700718620""",4,4.13,Editorial Porrua,Hardcover,254,2001,2001,2016/11/05,2016/11/02,,,read,Es un excelente libro que bien comprende el periodo modernos de la política mexicana. Traiciones y corruptelas; asociaciones que las impulsan las aguas de las conveniencias entre grupos que aspiran al poder.,,,,,,0,,,,,
30638273,Gestión Práctica de Proyectos con Scrum,************* Martel,"Martel, Antonio",,"=""""","=""9781310811999""",4,4.50,Smashwords Edition,ebook,,2016,,2016/07/28,2016/07/27,,,read,,,,,,,0,,,,,
20759457,Diez bicicletas para treinta sonámbulos,Luis Landero,"Landero, Luis","************* Muñoz Molina, José Ovejero, Andrés Neuman, Isabel Mellado, Cristina Fallarás, Juan Gracia Armendariz, Chaterine François, Santiago Auserón, Elsa Fernández Santos, Guillermo Aguirre, Juan Aparicio Belmonte, Jordi Doce, Ricardo Menéndez Salmón, Juan Carlos Mestre, Fernando Aramburu, Francisco Javier Irazoki, Álvaro Valverde, Lola Huete Machado, Marta Caballero, Antonio Orejudo, Andrés Rubio, Marta Sanz, Ángela Medina, Eduardo Laporte, Juan Martinez de las RIvas, Felipe Benítez Reyes, Sara Mesa, Agustín Fernández Mallo, Luis Eduardo Aute, Eloy Tizón, Demipage, Jean François Martin","=""""","=""""",3,3.30,Demipage,Kindle Edition,256,2013,2013,,2015/11/04,,,read,,,,,,,0,,,,,
13079340,Ánima,Ortuño *************,"Antonio, Ortuño",,"=""""","=""9786073104821""",5,3.54,Mondadori,Paperback,254,2012,2011,,2015/11/03,,,read,,,,,,,0,,,,,
13308653,"Filosofía Mexicana. (Sepan Cuantos, #78)",************* Ibargüengoitia,"Ibargüengoitia, Antonio",,"=""9700745430""","=""9789700745435""",0,0.0,Porrua,Paperback,268,2004,2004,,2013/01/06,to-read,to-read (#1),to-read,,,,,,,0,,,,,

Imprime todo el archivo con las modificaciones hechas.

sed 's/rodrigo/Rodrigo/' lista.cvs

Rodrigo,ramos,godínez,calle
rafel,benito,perez,primero
daniela,ramos,avalos,once
cristina,bolanos,avalos,avenida
1- maria elena,godinez,vera,calle

Ahora, si solo se quiere la impresión de las líneas afectadas.

sed -n 's/rodrigo/Rodrigo/p' lista.cvs

Rodrigo,ramos,godínez,calle

Elimina la línea con la coincidencia e imprime todo el archivo.

sed '/maria/d' lista.cvs

rodrigo,ramos,godínez,calle
rafel,benito,perez,primero
daniela,ramos,avalos,once
cristina,bolanos,avalos,avenida


Elimina todas las líneas

sed 'd' lista.cvs

Elimina las líneas en blanco

sed '/^$/d' lista.cvs

Una substitución muy sencilla, puede ser como la siguiente.

sed 's/Roberto/El chileno/g' goodreads_library_export.csv

   Antes

63032,2666,Roberto Bolaño,"Bolaño, Roberto",,"=""843396867X""","=""9788433968678""",5,4.20,Anagrama,Paperback,1126,2006,2004,,2015/11/03,,,read,,,,,,,0,,,,,

   Después

63032,2666,El chileno Bolaño,"Bolaño, El chileno",,"=""843396867X""","=""9788433968678""",5,4.20,Anagrama,Paperback,1126,2006,2004,,2015/11/03,,,read,,,,,,,0,,,,,

Puede tomar un rango. Es decir, las primeras 10, lineas. Los dos siguientes ejemplos producen el mismo resultado.

sed '10,$d' file


sed '10,/^$/d'


Borrar la primer linea. Borrar la segunda linea.

sed '1d' lista.cvs
sed '2d' lista.cvs


Algo un poco más elaborado es la siguiente manera. Con la siguiente instruccion eliminamos la primer coincidencia de una línea en blanco.

sed '/^1/,/^2/ { /^$/d }' lista.cvs

Notar que ahora hago uso de las llaves ({}) para eliminar la primer coincidencia.

   Antes

rodrigo,ramos,godínez,calle
rafel,benito,perez,primero
daniela,ramos,avalos,once
cristina,bolanos,avalos,avenida
1- maria elena,godinez,vera,calle

dejamos,espacio,anterior, siempre

2- otro espacio

2- mas espacio

   Después

rodrigo,ramos,godínez,calle
rafel,benito,perez,primero
daniela,ramos,avalos,once
cristina,bolanos,avalos,avenida
1- maria elena,godinez,vera,calle
dejamos,espacio,anterior, siempre
2- otro espacio

2- mas espacio



Comentarios

Entradas populares de este blog

Análisis de conexiones TIME_WAIT

Agregar un usuario a un grupo secundario

Desencriptar passwords AES y DES en WebLogic 10