Úkol je jednoduchý. Musíte odstranit konkrétní řádky z textového souboru v terminálu Linux.
Můžete použít textový editor jako Vim nebo Nano, zadat soubor a odstranit požadované řádky. Tento přístup však není vhodný pro automatizaci pomocí bash skriptů.
Místo toho můžete použít výkonný editor příkazového řádku sed a odstranit řádky, které odpovídají konkrétním kritériím. A samozřejmě můžete použít sed ve svých skriptech shellu.
Dovolte mi ukázat několik případů použití.
⚠️Příklady zobrazené zde okamžitě upraví původní soubor. Než s ním začnete experimentovat, bylo by dobré si tento soubor zálohovat.Odebrat n-tý řádek ze souboru
Představte si, že musíte odstranit číslo 7. řádku v souboru. Příkaz sed můžete použít takto:
sed -i '7d' filename
Dovolte mi vysvětlit, jak to funguje:
-i
:Tato možnost umožňuje úpravy na místě. Ve výchozím nastavení sed zobrazí pouze výstup. S tímto-i
možnost, upraví aktuální soubor, aniž by jej zobrazil na displeji.7d
:Zde je číslo 7 ad
dává pokyn k odstranění řádku.filename
:Toto je soubor, který chcete upravit. Můžete také zadat absolutní nebo relativní cestu, pokud je soubor v jiném adresáři.
Dovolte mi to ukázat na reálném příkladu. Zde je ukázkový textový soubor s názvem agatha.txt:
The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
Giant's Bread
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies
K odstranění 4. řádku z tohoto souboru používám:
sed '4d' agatha.txt
Výsledkem bude následující zobrazení s odstraněným řádkem 'Giant's Bread':
The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies
Nyní řekněme, že chcete odstranit první řádek souboru v příkazovém řádku Linuxu. Použijte sed takto:
sed -i '1d' filename
💡Pokud chcete vidět výsledek manipulace bez úpravy samotného souboru, nepoužívejte -i
možnost příkazu sed. Odstranění posledního řádku pomocí sed
Naučili jste se odstranit konkrétní řádek, ale co když potřebujete odstranit poslední řádek?
Vždy můžete získat celkový počet řádků v souboru pomocí příkazu wc a použít toto číslo se sed. Sed má však vyhrazený způsob odstranění posledního řádku souboru. Nyní se již nemusíte starat o počet souborů.
sed -i '$d' filename.txt
Smazat řadu řádků
Podobně jako tomu, co jste viděli dříve, můžete také odstranit řadu řádků ze souboru.
Předpokládejme, že musíte odstranit řádky od 11 do 15, rozsah můžete zadat takto:
sed -i '11,15d' filename
Všimněte si, že odstraní také řádky 11 a 15, nejen řádky, které spadají mezi ně.
Odstranění řádků obsahujících řetězec
Můžete také použít sed k odstranění všech řádků, které obsahují daný řetězec nebo odpovídají konkrétnímu vzoru.
Níže uvedený příkaz odstraní všechny řádky, které obsahují slovo 'string':
sed -i '/string/d' filename
Pamatujte, že se jedná o vyhledávání rozlišující malá a velká písmena. Místo běžného řetězce můžete také použít vzor regulárního výrazu.
Odstranění řádků začínajících slovem
Pokud chcete odstranit všechny řádky začínající konkrétním slovem nebo písmenem, stačí zadat vzor regulárního výrazu takto:
sed -i '/^word/d' filename
Bonusový tip:Odstraňte všechny prázdné řádky
Než ukončím tento článek, dovolte mi rychle se podělit o to, jak můžete odstranit všechny prázdné řádky pomocí sed:
sed -i '/^$/d' filename
Doufám, že vám tento rychlý tip pomůže při odstraňování řádků z textového souboru v příkazovém řádku Linuxu.
Pokud máte zájem, zjistěte více o editoru příkazového řádku sed: