Někdy potřebujeme odstranit konkrétní řádek z jednoho nebo více souborů. Například jsem měl celý seznam souborů a potřebuji ze všech odstranit řádek č. 27 (řádek č. 27 je ACL, pravidlo, konfigurace). Mohu buď upravovat soubor po souboru, nebo jednoduše dosáhnout toho, co potřebuji, pomocí příkazu sed a bash skriptu (volitelné).
Ale zkusme jeden soubor poněkud jednoduchý.
Máme soubor distros-deb.txt , který obsahuje toto:
debian
kubuntu
archlinux
solusy
máta
Jinými slovy, soubor distros-deb.txt je místem, kde vypíšeme distribuce založené na Debianu, ale vidíme, že řádek č. 3 obsahuje „archlinux“, distribuci, která s Debianem zjevně nemá nic společného, takže musíme tento řádek odstranit. Chcete-li řádek č. 3 z tohoto souboru odstranit, přidáme následující:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Vysvětlení tohoto řádku je snadné: pomocí `sed "3d"` indikujeme, že smažeme řádek č. 3, pomocí `distros-deb.txt` říkáme, se kterým souborem má pracovat, tedy že má z tohoto souboru smazat řádek č. 3. Doposud nám po stisknutí `<kbd>Enter</kbd>` zobrazovalo, co chceme, ale v terminálu, takže pomocí `>distros-deb-ok.txt` indikujeme, že místo zobrazení výsledku v terminálu by se měl uložit do souboru s tímto názvem.
Co je jednoduché?
Použití souboru > distros-deb-ok.txt se můžeme také vyhnout použitím parametru -i v příkazu sed.
Jinými slovy, pokud chceme řádek ze souboru odstranit a uložit ho pod stejným názvem (a ne do jiného souboru), stačí přidat parametr -i :
sed -i "3d" distros-deb.txt
Tím odstraníte řádek # 3 z distros-deb.txt a uložíte jej.
Co když chci řadu řádků, to znamená odstranit řádek # 3, ale také # 4 a # 5? Abychom toho dosáhli, dali jsme rozsah od 3 do 5, to znamená:
sed -i "3,5d" distros-deb.txt
A ukáže mi to jen debian a kubuntu
Co když chci smazat z řádku 2 do posledního, když neznám celkové řádky?
Stačilo by použít symbol dolaru - »$
sed -i "2,$d" distros-deb.txt
V případě, že chcete vyloučit z prvního řádku na # 4, jednoduše vložíme hodnotu 1 na začátek:
sed -i "1,4d" distros-deb.txt
To je v podstatě vše, docela užitečný tip, když chcete psát bash skripty pro automatizaci úloh a potřebujete upravovat a mazat řádky v konfiguračních souborech. Pro úpravu můžeme použít sed nebo perl a pro mazání už víme, jak to udělat pomocí sed.
pozdravy