GNU/Linux >> Znalost Linux >  >> Linux

Unix Sed Výuka:Víceřádkové operace se soubory s 6 praktickými příklady

V rámci naší série výukových programů UNIX sed jsme se dříve zabývali tiskem, mazáním, nahrazováním, zápisem souborů, příkazy pro manipulaci se soubory atd., s jedním řádkem v prostoru vzoru.

V tomto článku se podíváme na to, jak provést víceřádkovou operaci v Sed.

Pamatujete si pracovní metodologii Sed, kterou jsme se naučili v našem prvním tutoriálu pro sed?. V tomto článku jsme vysvětlili, že Sed čte řádek po řádku, odstraňuje všechny nové koncové řádky, umísťuje řádek do vyrovnávací paměti prostoru vzorů, zpracovává podle daných příkazů a tiskne prostor vzoru.

V případě, že chcete odstranit všechny nové řádky v souboru, nemůžete použít následující metodu. Protože nový řádek je již odstraněn a umístěn do prostoru vzoru.

$ sed 's/\n//' filename or  $sed 's/\n/ENDOFLINE\n/' filename

Pro situace, jako je tato, je vhodný sed víceřadý. Sed poskytuje příkaz „N“ pro víceřádkové operace.

Příkaz N přečte další řádek ze vstupu, Přidat další řádek do prostoru vzoru. Další řádek je oddělen od prostoru původního vzoru znakem nového řádku.

Nejprve vytvořte soubor geekstuff.txt, který bude použit ve všech níže uvedených příkladech.

$ cat thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)


Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.
$

Poznámka: Ve výše uvedeném vstupu jsou dva po sobě jdoucí prázdné řádky. ( 5. a 6. řádek ).

Příklad sed 1. Spojte dva po sobě jdoucí řádky

$ sed -e '{
N
s/\n/ @ /
}' thegeekstuff.txt

Linux Sysadmin @ Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc. @ Security (Firewall, Network, Online Security etc)
 @
Storage in Linux @ Website Design
Website Design @ Windows- Sysadmin, reboot etc.

Ve výše uvedeném příkladu

  • Složené závorky „{“ a „}“ používané k seskupování příkazů. Složené závorky a příkazy sed musí být na samostatných řádcích.
  • Sed přečte první řádek a umístí jej do prostoru vzoru, příkaz N přečte další řádek a připojí prostor vzoru, tj. první řádek oddělený novým řádkem. Prostor vzorů tedy nyní bude mít první řádek\ndruhý řádek.
  • Další náhrada \n za space@space a vytiskne obsah vzorového prostoru jako své výchozí chování. Po sobě jdoucí řádky jsou tedy spojeny a odděleny znakem „ @ “

Příklad Sed 2. Očíslujte každý neprázdný řádek souboru

Jak bylo zmíněno v našem předchozím článku, =je příkaz pro získání čísla řádku souboru.

$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'
1 Linux Sysadmin
2 Databases - Oracle, mySQL etc.
3 Databases - Oracle, mySQL etc.
4 Security (Firewall, Network, Online Security etc)

7 Storage in Linux
8 Website Design
9 Website Design
10 Windows- Sysadmin, reboot etc.
  • První příkaz sed vytiskne číslo řádku a vytiskne původní řádek na další řádek, pokud není prázdný. (Spusťte jej a podívejte se na výstup prvního příkazu sed).
  • Další příkaz sed pouze připojí pár řádků.

Příklad sed 3. Odstranění dvou po sobě jdoucích prázdných řádků ze vstupu

$ sed '/^$/{
N
/^\n$/d
}' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.

Pokud je řádek prázdný, přečte a připojí další řádek, /^\n$/ představuje, dva řádky jsou prázdné,\n se přidá příkazem N. Pak stačí odstranit prostor vzoru a spustit další cyklus pomocí příkazu ‚d‘.

Sed Příklad 4. Smazat poslední 2 řádky souboru

Před zobrazením tohoto příkladu si musíte být vědomi dvou zajímavých příkazů sed.

  1. P – který vytiskne první řádek vzorového prostoru. (do prvního \n).
  2. D – Odstraní první řádek z prostoru vzoru. Řízení poté přejde do horní části skriptu.
$ sed 'N;$!P;$!D;$d' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
  1. Přečte první řádek a umístí jej do prostoru vzoru.
  2. Příkaz N přečte další řádek a připojí jej k prostoru se vzorem odděleným novým řádkem. (Nyní první řádek\ndruhý řádek)
  3. Pokud nedosáhne posledního řádku ($), vytiskněte první řádek a odstraňte pouze první řádek z prostoru vzoru. Poté cyklus začne znovu.
  4. Takto se spojí 2.\n3. řádek, 3.\n4. řádek a pokračuje.
  5. Aspoň když má 9.\n10. řádek v prostoru vzoru, dosáhne $, takže prostor se vzorem pouze smaže. ($!P a $!D se nevytisknou a nesmažou, pokud je $).

Příklad Sed 5. Tisk posledních 2 řádků souboru

$ sed '$!N;$!D' thegeekstuff.txt
Website Design
Windows- Sysadmin, reboot etc.

Výše uvedené spojuje a odstraňuje každý řádek, dokud v prostoru vzoru nebudou poslední dva řádky. Když dosáhne $, vytiskne prostor se vzorem, který bude mít pouze poslední dva řádky.

Sed Příklad 6. Odstranění duplicitních, po sobě jdoucích řádků ze souboru

Níže uvedený příkaz zkontroluje každý řádek spojený s dalším řádkem, zkontroluje, zda jsou oba stejné, pak netiskne prostor vzoru tisku (!P), stačí odstranit první řádek z prostoru vzoru. V prostoru vzorů tedy zůstane pouze jeden řádek.

$ sed '$!N; /^\(.*\)\n\1$/!P; D' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
Windows- Sysadmin, reboot etc.

Linux
  1. Výukový program příkazu Linux/UNIX Awk s příklady

  2. Výukový program Awk:Pochopte proměnné Awk pomocí 3 praktických příkladů

  3. Bash Shell Exit Status Tutorial s praktickými příklady

  1. 17 Užitečný příkaz Tar s praktickými příklady v Linuxu

  2. Rozdílový příkaz v Linuxu s příklady

  3. Výukový program příkazu mktemp s příklady pro začátečníky

  1. Výukový program příkazu Grep s příklady pro začátečníky

  2. Kompletní průvodce příkazy Sed [vysvětleno praktickými příklady]

  3. Linux sed Použití příkazů s příklady