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
si quisiera borrar «kubuntu» u otro cualquiera pero no se en que línea está (pero se que está), como sería ??
Salu2s 😉
Desde hace rato me preguntaba cómo hacer eso. Muchas gracias @KZKG^Gaara.