Kako izbrisati določene vrstice iz datoteke s pomočjo sed

Včasih moramo odstraniti določeno vrstico iz ene ali več datotek. Na primer, imel sem cel seznam datotek in iz vseh moram odstraniti vrstico št. 27 (vrstica št. 27 je ACL, pravilo, konfiguracija). Lahko urejam datoteko za datoteko ali pa preprosto dosežem, kar potrebujem, z ukazom sed in skriptom bash (neobvezno).

Toda poskusimo z eno samo datoteko, ki je nekoliko preprosta.

Imamo datoteko distros-deb.txt , ki vsebuje tole:

debian

kubuntu

archlinux

raztopine

Mint zelena

Z drugimi besedami, datoteka distros-deb.txt je tista, kjer bomo našteli distribucije, ki temeljijo na Debianu, vendar vidimo, da vrstica št. 3 vsebuje "archlinux", distribucijo, ki očitno nima nič skupnega z Debianom, zato moramo to vrstico odstraniti. Če želimo odstraniti vrstico št. 3 iz te datoteke, bomo dodali naslednje:

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

Razlaga te vrstice je preprosta: z ukazom `sed "3d"` nakažemo, da bomo izbrisali vrstico št. 3, z ukazom `distros-deb.txt` pa povemo, na kateri datoteki naj dela, torej naj izbriše vrstico št. 3 iz te datoteke. Do te točke nam je, če pritisnemo `<kbd>Enter</kbd>`, prikazal, kar želimo, vendar v terminalu, zato z ukazom `>distros-deb-ok.txt` nakažemo, da namesto prikaza rezultata v terminalu tega shrani v datoteko s tem imenom.

Kaj je preprosto?

Uporabi datoteke > distros-deb-ok.txt se lahko izognemo tudi z uporabo parametra sed , parametra -i .

Z drugimi besedami, če želimo vrstico odstraniti iz datoteke in jo shraniti z istim imenom (in ne v drugo datoteko), moramo preprosto dodati parameter -i :

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

S tem boste vrstico št. 3 odstranili iz distros-deb.txt in jo shranili.

Kaj pa, če želim obseg vrstic, to je odstraniti vrstico # 3, pa tudi # 4 in # 5? Da bi to dosegli, postavimo razpon od 3 do 5, to je:

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

In prikazal mi bo samo debian in kubuntu 

Kaj torej, če želim izbrisati iz vrstice 2 do zadnje, ko ne vem skupnega števila vrstic?

Samo uporabite dolarski simbol - »$

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

V primeru, da želite odstraniti iz prve vrstice na # 4, preprosto damo vrednost 1 na začetek:

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

To je v bistvu vse, precej uporaben nasvet, ko želite pisati bash skripte za avtomatizacijo opravil in morate spreminjati in brisati vrstice v konfiguracijskih datotekah. Za spreminjanje lahko uporabimo sed ali perl , za brisanje pa že vemo, kako to storiti s sed.

pozdrav


Dodaj kot prednostni vir v Googlu