Noticia Cómo borrar líneas específicas de un archivo usando sed

En determinadas ocasiones necesitamos eliminar alguna línea en específico de un archivo o de varios, por ejemplo, me ha sucedido que he tenido todo un listado de archivos y necesito eliminar la línea #27 de todos estos (la línea #27 es la de una ACL, norma, regla, configuración), bien puedo editar archivo por archivo o simplemente puedo lograr lo que necesito usando el comando sed y un script bash (opcional).

Pero, intentemos con un solo archivo algo simple.

Tenemos el archivo distros-deb.txt el cual contiene esto:

debian​

kubuntu​

archlinux​

solusos​

mint​

O sea, el archivo distros-deb.txt es en el cual pondremos las distros basadas en Debian, pero ahí vemos que en la línea #3 está “archlinux”, distro que evidentemente no tiene nada que ver con Debian, por lo que debemos eliminar esa línea. Para eliminar la línea #3 de ese archivo pondremos lo siguiente:

sed "3d" distros-deb.txt > distros-deb-ok.txt

Explicar esta línea es algo fácil, con sed “3d” estamos indicando que eliminaremos la línea #3, con distros-deb.txt le indicamos sobre qué archivo trabajar, o sea, eliminar la línea #3 de este archivo, hasta aquí si presionamos <kbd>Enter</kbd> nos mostrará lo que deseamos pero en la terminal, por lo que con > distros-deb-ok.txt estamos indicando que en vez de mostrar en terminal el resultado, que lo ponga en un archivo con este nombre.

¿A que es simple?

También, podemos evitar usar el > distros-deb-ok.txt usando un parámetro propio de sed, el parámetro -i

O sea, en caso de que deseemos eliminar la línea del archivo y guardarlo con su mismo nombre (y no en otro archivo) basta con agregar el parámetro -i :

sed -i "3d" distros-deb.txt

Esto eliminará la línea #3 de distros-deb.txt y lo guardará.

¿Qué sucede si deseo un rango de líneas, o sea eliminar la línea #3 pero también la #4 y #5? Para lograr esto ponemos el rango del 3 al 5, o sea:

sed -i "3,5d" distros-deb.txt

Y me mostrará solamente debian y kubuntu :D

¿Y qué si deseo eliminar desde la línea 2 hasta la última, cuando no conozco el total de líneas?

Bastaría con usar el símbolo de dollar -» $

sed -i "2,$d" distros-deb.txt

En caso de que se desee eliminar desde la primera línea hasta la #4 entonces simplemente ponemos el valor 1 al inicio:

sed -i "1,4d" distros-deb.txt

Esto viene siendo todo, un tip bastante útil cuando se desea hacer scripts bash para automatizar tareas y se necesita modificar y eliminar líneas de archivos de configuración, para modificar podemos usar sed o perl, así como para eliminar ya sabemos cómo hacerlo con sed ;)

Saludos


f77zGlDhFKQ


Continúar leyendo...