Usar sed para modificar contenido en archivos de texto

En el post anterior («Usar sed para filtrar contenido en archivos de texto«) dimos nuestros primeros pasos para aprender a utilizar sed. En esta oportunidad vamos a ver cómo utilizar esta herramienta para modificar el contenido de archivos sin tener que abrirlos con un editor de texto.

Para ilustrar los siguientes tips utilizaremos el archivo martinfierroCap1.txt.

TIP 1: Reemplazar palabras o caracteres con sed

Para reemplazar todas las ocurrencias de la palabra cantar por interpretar podemos utilizar el siguiente comando. Entre el primer par de barras se colocar el término de búsqueda y a continuación la palabra que se desea utilizar para reemplazarlo.

[pastacode lang=»bash» manual=»sed%20’s%2Fcantar%2Finterpretar%2Fg’%20martinfierroCap1.txt» message=»» highlight=»» provider=»manual»/]

Si deseamos que no se distinga entre mayúsculas y minúsculas, podemos utilizar la la opción gi en vez de g al fin del comando. Dicho de otra manera, utilizando

[pastacode lang=»bash» manual=»sed%20’s%2Fcielo%2Ffirmamento%2Fgi’%20martinfierroCap1.txt» message=»» highlight=»» provider=»manual»/]

podemos cambiar la palabra cielo o Cielo por firmamento.

TIP 2: Reemplazar palabras o caracteres dentro de un rango dado

Otra posibilidad de la que disponemos consiste en efectuar reemplazos de palabras o caracteres dentro de un rango de líneas determinado. El siguiente ejemplo reemplazará todas las ocurrencias de cantar por sanatear que se encuentren entre la línea 5 y la 35, dejando intactas las que se se hallen fuera del mismo:

[pastacode lang=»bash» manual=»sed%20’5%2C35%20s%2Fcantar%2Fsanatear%2Fg’%20martinfierroCap1.txt» message=»» highlight=»» provider=»manual»/]

TIP 3: Edición utilizando expresiones regulares

Existen ocasiones en las que el criterio de búsqueda no es un término particular, sino que sigue un patrón que puede ser modelado mediante una expresión regular. El siguiente ejemplo elimina las líneas en blanco del archivo martinfierroCap1.txt utilizando la expresión regular ^$ (la cual representa líneas vacías) y el comando d (delete):

[pastacode lang=»bash» manual=»sed%20’%2F%5E%24%2Fd’%20martinfierroCap1.txt» message=»» highlight=»» provider=»manual»/]

TIP 4: Editar un archivo y guardar copia del original

En los tips anteriores mostramos el resultado de los reemplazos por pantalla. Sin embargo, también podemos hacer la edición del archivo y guardar los cambios en el mismo. El siguiente ejemplo reemplazará todas las ocurrencias de cantar por sanatear en el archivo mismo sin mostrar nada por pantalla. A su vez, guardará una copia del archivo original como martinfierroCap1.txt.orig:

[pastacode lang=»bash» manual=»sed%20-i’.orig’%20’s%2Fcantar%2Fsanatear%2Fg’%20martinfierroCap1.txt» message=»» highlight=»» provider=»manual»/]

Ejemplo final

En este caso enviaremos la salida del comando ip route show a una primer instancia de sed que devolverá únicamente la línea donde se encuentra la palabra clave src. Luego, una segunda instancia reemplazará los espacios dobles por uno simple, el cual servirá como separador de campos para cut, que finalmente devolverá el noveno campo. ¿Pueden adivinar de qué se trata? Sí, la dirección IP de nuestro equipo según la tabla de ruteo.

[pastacode lang=»bash» manual=»ip%20route%20show%20%7C%20sed%20-n%20’%2Fsrc%2Fp’%20%7C%20sed%20-e%20’s%2F%20%20*%2F%20%2Fg’%20%7C%20cut%20-d’%20’%20-f9″ message=»» highlight=»» provider=»manual»/]

Hasta la próxima.

Deja una respuesta