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 😀

¿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

¿Te resultó interesante? Compártelo ...



KZKG^Gaara

Publicado por KZKG^Gaara

http://desdelinux.net » Forma parte de GUTL desde el 6 diciembre, 2011. Usuario de GNU/Linux desde hace varios años, eterno enamorado de la terminal y las posibilidades que nos brinda,siempre pensando que el error está entre el ordenador y la silla. Usuario y defensor de KDE por convicción, de Debian por el equilibrio que me brinda. Siempre estoy en /bin/bash detrás de mi Geass.

Este artículo tiene 2 comentarios

  1. si quisiera borrar «kubuntu» u otro cualquiera pero no se en que línea está (pero se que está), como sería ??

    Salu2s 😉

Los comentarios están cerrados.