GNU/Linux >> Znalost Linux >  >> Linux

Odstranění konkrétních řádků ze souboru v příkazovém řádku Linuxu

Ú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 a d 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:


Linux
  1. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

  2. Jak zobrazit konkrétní řádky souboru v příkazovém řádku Linuxu

  3. Příklady příkazů sed v Linuxu

  1. Používání Disku Google z příkazového řádku systému Linux

  2. Příkaz wc pro Linux

  3. Linux - grep od určitých řádků až do konce souboru

  1. Jak počítat počet řádků v souboru v Linuxu (příklady wc a nl)

  2. 7 Příklady příkazů Linux Uniq k odstranění duplicitních řádků ze souboru

  3. Rychlý unixový příkaz pro zobrazení konkrétních řádků uprostřed souboru?