Com esborrar línies específiques d'un fitxer fent servir set

En determinades ocasions necessitem eliminar alguna línia en específic d'un fitxer o de diversos, per exemple, m'ha succeït que he tingut tot un llistat de fitxers i necessito eliminar la línia #27 de tots aquests (la línia #27 és la d'una ACL, norma, regla, configuració), bé puc editar fitxer per fitxer o simplement puc aconseguir el que necessito usant la comanda.

Però, intentem amb un sol arxiu alguna cosa simple.

Tenim el fitxer distros-deb.txt que conté això:

debian

kubuntu

Archlinux

solusos

menta

És a dir, el fitxer distros-deb.txt és on posarem les distros basades en Debian, però veiem que a la línia #3 hi ha «archlinux», distro que evidentment no té res a veure amb Debian, per la qual cosa hem d'eliminar aquesta línia. Per eliminar la línia #3 d'aquest fitxer posarem el següent:

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

Explicar aquesta línia és una cosa fàcil, amb set «3d» estem indicant que eliminarem la línia #3, amb distros-deb.txt li indiquem sobre quin fitxer treballar, o sigui, eliminar la línia #3 d'aquest fitxer, fins aquí si pressionem <kbd>Enter</kbd> ens mostrarà el que desitgem però a la terminal, de manera que amb > distros-de. resultat, que el posi en un fitxer amb aquest nom.

A que és simple?

També, podem evitar fer servir el > distros-deb-ok.txt usant un paràmetre propi de set , el paràmetre -i

És a dir, en cas que vulguem eliminar la línia del fitxer i desar-lo amb el mateix nom (i no en un altre fitxer) només cal afegir el paràmetre -i :

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

Això eliminarà la línia # 3 de distros-deb.txt i el guardarà.

Què passa si vull un rang de línies, és a dir eliminar la línia # 3 però també la # 4 i # 5? Per aconseguir això posem el rang de el 3 a el 5, és a dir:

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

I només em mostrarà debian i kubuntu 

I què si vull eliminar des de la línia 2 fins a l'última, quan no conec el total de línies?

N'hi hauria prou amb fer servir el símbol de Units - »$

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

En cas que es desitgi eliminar des de la primera línia fins a la # 4 llavors simplement posem el valor 1 a l'inici:

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

Això és tot, un tip força útil quan es vol fer scripts bash per automatitzar tasques i cal modificar i eliminar línies d'arxius de configuració, per modificar podem fer servir set o perl , així com per eliminar ja sabem com fer-ho amb set 

Salutacions


Afegir com a font preferida a Google