Specifieke regels uit een bestand verwijderen met sed

In bepaalde gevallen moeten we een specifieke regel uit een bestand of meerdere verwijderen, het is me bijvoorbeeld overkomen dat ik een hele lijst met bestanden heb en ik moet regel 27 van al deze regels verwijderen (regel 27 is dat van een ACL, norm, regel, configuratie), kan ik bestand voor bestand bewerken of ik kan gewoon bereiken wat ik nodig heb met de opdracht dorst en een bash-script (optioneel).

Maar laten we een enkel bestand enigszins eenvoudig proberen.

We hebben het dossier distributies-deb.txt die dit bevat:

debian

kubuntu

archlinux

solussen

munt

Met andere woorden, het bestand distributies-deb.txt is waarin we de op Debian gebaseerde distributies zullen plaatsen, maar daar zien we dat er in regel # 3 "archlinux" is, een distro die duidelijk niets met Debian te maken heeft, dus we moeten die regel elimineren. Om regel 3 van dat bestand te verwijderen, zullen we het volgende plaatsen:

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

Het uitleggen van deze regel is enigszins eenvoudig, met dorst "3d" we geven aan dat we regel # 3 zullen verwijderen, met distributies-deb.txt We geven aan aan welk bestand we moeten werken, dat wil zeggen, verwijder regel # 3 van dit bestand, tot hier als we op Enter drukken , zal het ons laten zien wat we willen, maar in de terminal, dus met > distros-deb-ok.txt we geven aan dat in plaats van het resultaat weer te geven in terminal, het in een bestand met deze naam is geplaatst.

Wat is simpel?

We kunnen ook voorkomen dat we de > distros-deb-ok.txt met behulp van een juiste parameter van dorst, de parameter -i

Dat wil zeggen, in het geval dat we de regel uit het bestand willen verwijderen en het met dezelfde naam willen opslaan (en niet in een ander bestand), voeg dan gewoon de parameter toe -i :

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

Hiermee wordt regel 3 uit distros-deb.txt verwijderd en opgeslagen.

Wat als ik een reeks regels wil, dat wil zeggen regel # 3 maar ook # 4 en # 5 verwijderen? Om dit te bereiken zetten we het bereik van 3 tot 5, dat wil zeggen:

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

En het zal mij alleen debian en kubuntu laten zien 

Dus wat als ik wil verwijderen van regel 2 naar de laatste, als ik het totaal aantal regels niet weet?

Gebruik gewoon het dollarteken - »$

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

Als u de eerste regel naar # 4 wilt elimineren, plaatsen we eenvoudig de waarde 1 aan het begin:

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

Dit was alles, een zeer nuttige tip als je bash-scripts wilt maken om taken te automatiseren en je regels met configuratiebestanden moet aanpassen en verwijderen, om te wijzigen kunnen we gebruiken dorst o perl, en om te elimineren weten we al hoe we het moeten doen met sed 

groeten


Voeg dit toe als voorkeursbron in Google.