GNU/Linux >> Znalost Linux >  >> Linux

Úvod do sed (Editor streamu) :Užitečné příklady příkazů sed

Úvod do editoru sed

Výraz sed je zkratka pro stream editor . Sed může převzít svůj vstup ze standardního vstupu, aplikovat požadované úpravy na stream a automaticky převést výsledky na standardní výstup. Syntaxe sed umožňuje zadat vstupní soubor na příkazovém řádku.

Když je spuštěný editor sed, nemusíte komunikovat; proto byl také označen jako dávkový editor. To je na rozdíl od editorů jako vi a ed, které jsou interaktivní. Protože sed nevyžaduje interakci, můžete příkazy sed umístit do skriptu. Můžete zavolat soubor skriptu a spustit jej proti datovému souboru, abyste mohli provádět opakované operace úprav.

Formát příkazu

Následující text ukazuje syntaxi příkazu sed:

# sed [options] 'action [args]' files [ > outfile]

Editor sed je schopen provádět substituce textových vzorů a mazání textových vzorů pomocí syntaxe regulárních výrazů. Jedná se o stejné znaky regulárního výrazu, které používá grep.

Příkaz sed nabízí možnosti, které jsou rozšířením interaktivní úpravy textu. Pokud potřebujete hledat a nahrazovat textové řetězce ve velkém počtu souborů, sed je nejužitečnější.

Úprava příkazů

Editor sed používá editační příkazy (uvedené v tabulce), které jsou podobné těm, které byste použili pro vi a ed.

Příkaz Funkce
d Smaže řádek(y)
p Vytiskne řádek(y)
r Čte soubor
s Nahrazuje jeden řetězec jiným
w Zapisuje do souboru

Příkaz sed má dvě možnosti:

Možnost Funkce
-n Potlačí výchozí výstup
-f Čte příkazy sed ze souboru skriptu

Ukázková data použitá v příkladech

Následující příklady provádějí příkazy sed proti souboru s názvem „data.txt“. Obsah souboru data.txt je následující.

# cat data.txt
northwest	NW	Joel Craig	    10
western  	WE	Sharon Kelly	40
southwest	SW	Chris Foster	33
southern 	SO	May Chin	    45
southeast	SE	Derek Johnson	3
eastern  	EA	Susan Beal	    34
northeast	NE	TJ Nichols	    67
north    	NO	Val Shultz	    91
central  	CT	Sheri Watson	44

Použití sed k tisku textu

Příklad 1 :Rozsah tisku řádků

Následující příklad ukazuje použití příkazu p (print), který vytiskne rozsah řádků na stdout. Rozsah je určen počáteční adresou následovanou čárkou a poté koncovou adresou. Výchozí výstup sed je každý řádek, který přečte. Chcete-li potlačit výchozí výstup, použijte volbu -n.

# sed -n '3,5p' data.txt 
southwest       SW      Chris Foster        33
southern        SO      May Chin            45
southeast       SE      Derek Johnson       3

Příklad 2:Tisk řádků obsahujících konkrétní vzor

Následující příkaz vytiskne všechny řádky se vzorem západ. K oddělování regulárního výrazu použijte lomítko (/).

# sed -n '/west/p' data.txt 
northwest       NW      Joel Craig          10
western         WE      Sharon Kelly        40
southwest       SW      Chris Foster        33

Příklad 3:Tisk čáry s více vzory

Následující příkaz vytiskne první řádek obsahující vzor na západ až po další řádek obsahující vzor na jih včetně.

# sed -n '/west/,/southern/p' data.txt 
northwest       NW      Joel Craig          10
western         WE      Sharon Kelly        40
southwest       SW      Chris Foster        33
southern        SO      May Chin            45

Příklad 4 :Tisk čáry se vzorem a všech čar poté

Následující příkaz vytiskne první řádek obsahující vzor Chris až po poslední řádek souboru.

# sed -n '/Chris/,$p' data.txt 
southwest       SW      Chris Foster        33
southern        SO      May Chin            45
southeast       SE      Derek Johnson       3
eastern         EA      Susan Beal          34
northeast       NE      TJ Nichols          67
north           NO      Val Shultz          91
central         CT      Sheri Watson        44

Příklad 5 :Funkce podobná grep

Vzor může obsahovat znaky regulárního výrazu používané grep. Následující příklad vytiskne všechny řádky, které začínají sa a končí 5.

# sed -n '/^s.*5$/p' data.txt 
southern        SO      May Chin            45

Použití sed k nahrazení textu

Příkaz Příklad Akce úprav
s sed s/x/y/option Vyhledat a nahradit. Vyhledávací vzor x je nahrazen vzorem y. Vzor vyhledávání a nahrazování jsou ve většině případů regulární výrazy a chování vyhledávání a nahrazování lze ovlivnit různými možnostmi.
y sed y/abc/xyz/ Nahraďte každý znak ze sady zdrojových znaků znakem, který má stejnou pozici v sadě cílových znaků.

Příklad 1 :Vyhledejte a nahraďte konkrétní vzor

Sed s příkaz umožňuje provedení operace vyhledávání a nahrazování textu. Příkaz používá vyhledávání vzorů a doslovné nahrazení řetězce. Náhradní znaky řetězce jsou brány doslova bez rozšíření metaznaků.

# sed 's/3/X/' data.txt 
northwest       NW      Joel Craig          10
western         WE      Sharon Kelly        40
southwest       SW      Chris Foster        X3
southern        SO      May Chin            45
southeast       SE      Derek Johnson       X
eastern         EA      Susan Beal          X4
northeast       NE      TJ Nichols          67
north           NO      Val Shultz          91
central         CT      Sheri Watson        44

Příkaz sed zkontroluje každý řádek souboru a nahradí první výskyt starého řetězce novým řetězcem. Následné výskyty starého řetězce na stejném řádku zůstanou nezměněny.

Příklad 2 :Globálně vyhledejte a nahraďte konkrétní vzor

Následující příklad ukazuje g (globální) pomocí s (hledat a nahrazovat) a nahradí všechny výskyty starého řetězce novým řetězcem.

# sed 's/3/X/g' data.txt 
northwest       NW      Joel Craig          10
western         WE      Sharon Kelly        40
southwest       SW      Chris Foster        XX
southern        SO      May Chin            45
southeast       SE      Derek Johnson       X
eastern         EA      Susan Beal          X4
northeast       NE      TJ Nichols          67
north           NO      Val Shultz          91
central         CT      Sheri Watson        44

Příklad 3 :Vyhledejte a nahraďte pomocí vyhledávacího vzoru zahrnutého v nahrazení

Občas při hledání a nahrazení bude starý řetězec součástí nového náhradního řetězce, čehož můžete dosáhnout umístěním &(ampersand) do náhradního řetězce. Umístění &určuje umístění starého řetězce v náhradním řetězci.

Cílem následujících příkladů je napsat příkaz, který vyhledá všechny řádky končící jednou číslicí v posledním poli a nahradí jednu číslici jednociferným číslem plus řetězcem Single Digit.

Chcete-li správně identifikovat řádky s jednocifernými čísly v posledním poli, zvažte následující příkaz sed. Tabulátory oddělují pole každým řádkem.

sed -n '/    [0-9]$/p' data.txt 
southeast       SE      Derek Johnson       3

Následující příkaz vyhledá všechny řádky, které končí jednou číslicí v posledním poli, a nahradí jednu číslici jednociferným číslem plus řetězcem Single Digit.

# sed 's/    [0-9]$/& Single Digit/' data.txt 
northwest       NW      Joel Craig          10
western         WE      Sharon Kelly        40
southwest       SW      Chris Foster        33
southern        SO      May Chin            45
southeast       SE      Derek Johnson       3 Single Digit
eastern         EA      Susan Beal          34
northeast       NE      TJ Nichols          67
north           NO      Val Shultz          91
central         CT      Sheri Watson        44

Odstranění textu pomocí sed

Příklad 1:Odstranění řady řádků

Následující příkaz odstraní řádky 4 až 8 z výstupu.

# sed '4,8d' data.txt 
northwest       NW      Joel Craig          10
western         WE      Sharon Kelly        40
southwest       SW      Chris Foster        33
central         CT      Sheri Watson        44

Příklad 2 :Odstranění řádků obsahujících konkrétní vzor

Následující příkaz odstraní jakýkoli řádek obsahující vzor západ.

# sed '/west/d' data.txt 
southern        SO      May Chin            45
southeast       SE      Derek Johnson       3
eastern         EA      Susan Beal          34
northeast       NE      TJ Nichols          67
north           NO      Val Shultz          91
central         CT      Sheri Watson        44

Příklad 3

Následující příkaz odstraní jakýkoli řádek začínající vzorem západ.

# sed '/^west/d' data.txt 
northwest       NW      Joel Craig          10
southwest       SW      Chris Foster        33
southern        SO      May Chin            45
southeast       SE      Derek Johnson       3
eastern         EA      Susan Beal          34
northeast       NE      TJ Nichols          67
north           NO      Val Shultz          91
central         CT      Sheri Watson        44

Příklad 4

Následující příkaz odstraní rozsah řádků začínajících prvním řádkem obsahujícím vzor jih až po další řádek souboru obsahujícího sever.

# sed '/south/,/north/d' data.txt 
northwest       NW      Joel Craig          10
western         WE      Sharon Kelly        40
north           NO      Val Shultz          91
central         CT      Sheri Watson        44

Další funkce sed – úpravy příkazů

Další příkazy editoru sed jsou uvedeny v následující tabulce.

Příkaz Funkce
a Připojí text
c Změní text na aktuálním řádku novým textem
i Vloží text nad aktuální řádek

Umístění více úprav do jednoho příkazu sed

Jsou chvíle, kdy chcete v souboru provést několik úprav. Místo použití více příkazů sed můžete použít volbu -e k umístění úprav do stejného příkazového řádku. Úpravy se provádějí v pořadí, které určíte.

Příklad 1

Pečlivě škrtejte řádky. Můžete provádět úpravy na řádku textu a následně tento řádek textu z výstupu odstranit. K tomu dochází v následujícím příkladu s řádkem 1 vstupního souboru.

# sed -e 's/north/North/' -e '1,4d' data.txt 
southeast       SE      Derek Johnson       3
eastern         EA      Susan Beal          34
Northeast       NE      TJ Nichols          67
North           NO      Val Shultz          91
central         CT      Sheri Watson        44


Linux
  1. Užitečné příklady příkazu Docker ps

  2. 10 Sed (Editor streamu) Příklady příkazů

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

  1. 12 Užitečné příklady příkazů Wget v Linuxu

  2. Příkaz ls v Linuxu:17 vysvětlení užitečných příkladů

  3. 5 Užitečné příklady příkazu firewall-cmd

  1. Příkaz Linux sed:Jak používat Stream Editor

  2. 14 Užitečné příklady příkazů „ls“ v Linuxu

  3. 9 Užitečné příklady dotykových příkazů v Linuxu