Ako odstrániť konkrétne riadky zo súboru pomocou programu sed

Niekedy potrebujeme odstrániť konkrétny riadok z jedného alebo viacerých súborov. Napríklad, mal som celý zoznam súborov a potrebujem odstrániť riadok č. 27 zo všetkých (riadok č. 27 je ACL, pravidlo, konfigurácia). Môžem buď upravovať súbor po súbore, alebo jednoducho dosiahnuť to, čo potrebujem, pomocou príkazu sed a bash skriptu (voliteľné).

Vyskúšajme však trochu jednoduchý súbor.

Máme súbor distros-deb.txt , ktorý obsahuje toto:

debian

kubuntu

Arch Linux

solúzy

mäta

Inými slovami, súbor distros-deb.txt je miestom, kde vypíšeme distribúcie založené na Debiane, ale vidíme, že riadok č. 3 obsahuje „archlinux“, distribúciu, ktorá zjavne nemá nič spoločné s Debianom, takže musíme tento riadok odstrániť. Ak chceme riadok č. 3 z tohto súboru odstrániť, pridáme nasledovné:

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

Vysvetlenie tohto riadku je jednoduché: pomocou `sed "3d"` označujeme, že vymažeme riadok č. 3, pomocou `distros-deb.txt` označujeme, s ktorým súborom má pracovať, teda má vymazať riadok č. 3 z tohto súboru. Doteraz, ak sme stlačili `<kbd>Enter</kbd>`, zobrazovalo sa nám to, čo chceme, ale v termináli, takže pomocou `>distros-deb-ok.txt` označujeme, že namiesto zobrazenia výsledku v termináli by sa mal uložiť do súboru s týmto názvom.

Čo je jednoduché?

Používaniu súboru > distros-deb-ok.txt sa môžeme vyhnúť aj použitím parametra sed , parametra -i .

Inými slovami, ak chceme odstrániť riadok zo súboru a uložiť ho s rovnakým názvom (a nie do iného súboru), stačí pridať parameter -i :

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

Týmto sa odstráni riadok č. 3 z distros-deb.txt a uloží sa.

Čo ak chcem rozsah riadkov, to znamená odstránenie riadku # 3, ale aj # 4 a # 5? Aby sme to dosiahli, dali sme rozsah od 3 do 5, to znamená:

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

A ukáže mi to len debian a kubuntu 

No a čo ak chcem vymazať z riadku 2 do posledného, ​​keď neviem súčet riadkov?

Stačí použiť symbol dolára - »$

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

Ak chcete vylúčiť z prvého riadku na # 4, potom jednoducho dáme hodnotu 1 na začiatok:

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

To je v podstate všetko, celkom užitočný tip, keď chcete písať bash skripty na automatizáciu úloh a potrebujete upravovať a mazať riadky v konfiguračných súboroch. Na úpravu môžeme použiť sed alebo perl a na mazanie už vieme, ako to urobiť pomocou sed.

pozdravy


Pridať ako preferovaný zdroj v Google