SED zkráceně 'Stream Editor' je výkonný editor textových proudů, který může provádět mnoho funkcí na souboru, který je vyhledávání, hledání a nahrazování a vkládání. Příkaz sed je příkaz s vědomím regulárních výrazů, což znamená, že rozumí regulárním výrazům, které jsou mu poskytovány.
SED se však primárně nebo hlavně používá pro nahrazování textu. S pomocí SED můžeme upravovat soubory, aniž bychom je museli otevírat, což bude mnohem rychlejší a rychlejší najít a nahradit něco v souboru, spíše než soubor otevírat a měnit.
V tomto tutoriálu se naučíme příkaz SED se snadno použitelnými a srozumitelnými příklady v našem prostředí Linux.
Syntaxe příkazu Sed
Syntaxe příkazu Sed je docela jednoduchá na pochopení, ale při použití je velmi výkonná. Zde je základní syntaxe SED takto:
sed OPTIONS... [SCRIPT] [INPUTFILE...]
Zvažte níže uvedený textový soubor ('content.txt') jako vstup pro příkaz sed models.
$ cat > content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
Níže jsou uvedeny nejpoužívanější příklady sed.
1. Nahrazení řetězce (slov nebo znaků)
Sed lze použít k vyhledání a nahrazení řetězce (slov nebo znaků) na vstupu. Možnost s
se používá pro výměnu řetězce. Ve výchozím nastavení příkaz sed nahradí pouze první výskyt řetězce v řádku.
Následující příkaz nahradí slovo 'lorem' výrazem 'Lorem' v souboru 'content.txt' pro první výskyt na každém řádku:
$ sed 's/lorem/Lorem/' content.txt
Zde je 'lorem' hledaný řetězec a 'Lorem' je nahrazující řetězec.
Output
$ sed 's/lorem/Lorem/' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
2. Nahradit veškerý výskyt řetězce v souboru
Chcete-li vyhledat a nahradit všechny výskyty řetězce v souboru, použijte /g
(globální nahrazení) příznak.
V následujícím příkazu /g
příznak se používá k nahrazení všech výskytů řetězce 'lorem' řetězcem 'Lorem' v souboru 'content.txt'.
$ sed 's/lorem/Lorem/g' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
3. Nahrazení n-tého výskytu vzoru v řádku
Příkaz sed lze použít s /1
,/2
nebo n
(libovolné číslo) k nahrazení prvního, druhého nebo n-tého výskytu řetězce v řádku.
Následující příkaz nahradí druhý (2) výskyt slova 'lorem' výrazem 'Lorem' v každém řádku.
$ sed 's/lorem/Lorem/2' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
Podobně jako příkaz tr může sed nahradit všechny výskyty znaků v sadě1 odpovídajícími znaky v sadě2 pomocí y/set1/set2/
.
$ echo 'a for apple' | sed -e 'y/af/AF/
Output
A For Apple
4. Nahradit od n-tého výskytu do všech výskytů v každém řádku
Můžeme použít kombinaci /1
,/2
nebo n
(libovolné číslo) a /g
k nahrazení všech vzorů z n-tého výskytu řetězce v každém řádku.
V následujícím příkladu budou všechny výskyty řetězce 'lorem' nahrazeny 'Lorem' od 2. výskytu v každém řádku:
$ sed 's/lorem/Lorem/2g' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
5. Vyhledejte a nahraďte řetězec na zadaném čísle řádku
Pomocí sed můžeme omezit funkci pouze na nahrazení řetězce na konkrétním čísle řádku.
V následujícím příkazu můžeme zjistit, že pouze druhý řádek je nahrazen řetězcem 'Lorem'.
$ sed '2 s/lorem/Lorem/' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
6. Zobrazit částečný text souboru
Pomocí příkazu sed můžete zobrazit spíše část souboru než celý soubor. -n
volba se používá k potlačení tisku veškerého obsahu a p
volba se používá tisk konkrétních řádků.
Následující příkaz vytiskne řádky od 2 do 4:
$ sed -n 2,4p content.txt
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
7. Zobrazit veškerý obsah kromě konkrétních řádků
Příkaz Sed umožňuje zobrazit veškerý obsah souboru kromě jednotlivých řádků. V následujícím příkazu zobrazte veškerý obsah souboru 'content.txt' kromě řádků 1 a 2:
$ sed 1,2d content.txt
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
8. Zobrazit všechny řádky kromě řádky odpovídající vzoru
Následující příkaz sed můžeme použít k odstranění řádku, který má zmíněný vyhledávací vzor. Ve výstupu je řádek s "učit" odstraněn, protože odpovídá vyhledávacímu vzoru.
$ sed '/learn/d' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
9. Zobrazit nahrazené řádky
Abychom vytiskli nahrazené řádky, používáme /p
příznak spolu s -n
.
Ve výstupu vidíme, že není poslední řádek, protože neměl vyhledávací vzor 'lorem'.
$ sed -n 's/lorem/Lorem/p' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Další příklady příznaku 'p' a 'n'
Vytiskněte první řádek
$ sed -n '1p' content.txt
Rozsah tisku řádku
$ sed -n '1,4p' content.txt
Tisk více řádků
$ sed -n '1p;4p' content.txt
Vytisknout soubor
$ sed -n 'p' content.txt
Tisk obsahuje regulární výraz nebo slovo
$ sed -n '/RedHat/p' content.txt
Vytisknout, pokud obsahuje číslice
$ sed -n '/[0-9]/p' content.txt
Porovnejte regulární výraz a nahraďte
$ sed -n 's/^L/Matched--&/p' content.txt
Output
Matched--Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Matched--Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Matched--Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Použijte sed jako grep
Následující příkaz sed vyhledá uživatele 'root' v souboru '/etc/passwd':
$ sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
10. Kombinujte příkazy SED
Pokud musíme provést více výrazů sed, musíme použít e
možnost řetězit příkazy sed.
Vezměme si příklad, kdy nahradíme veškerý výskyt „lorem“ výrazem „Lorem“ a odstraníme řádek, který odpovídá vyhledávacímu vzoru.
$ sed -e 's/lorem/Lorem/g' -e '/learn/d' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
11. Za každý řádek vložte prázdný řádek
Pomocí G
můžete do souboru vložit jeden nebo více prázdných řádků.
Následující příkaz vloží mezi řádky jeden prázdný řádek:
$ sed G content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
Chcete-li vložit dva prázdné řádky, spusťte níže uvedený příkaz:
$ sed 'G;G' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
11. Upravte a vytvořte záložní kopii původního souboru
Sed umožňuje upravit soubor a zároveň vytvořit záložní kopii původního souboru. Pro název záložního souboru používáme 'i.
' a -e
úpravy.
Následující příkaz vytvoří zálohu původního souboru 'content.txt' jako 'content.txt.bak'
$ sed -i.bak -e 's/lorem/Lorem/g' content.txt
Results
$ cat content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
$ cat content.txt.bak
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
12. Odstranění čáry se vzorem
Pomocí tohoto příkazu sed můžete odstranit řádek začínající určitým řetězcem a končící jiným řetězcem. V následujícím výstupu je řádek začínající „lorem“ a končící „textem“. je smazáno:
$ sed -e 's/^lorem.*text.$//g' content.txt
Output
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
13. Přidání řetězce k řádkům
Můžeme provést následující příkaz a přidat nějaký obsah před každý řádek pomocí regulárního výrazu.
V následujícím výstupu vidíme, že před každý řádek je přidáno 'Tady'.
$ sed -e 's/.*/Here &/' content.txt
Here lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Here lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Here lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Here learn more about dummy text.
Před každý řádek vložte řetězec:
$ sed 'i \inserted line' content.txt
inserted line
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
inserted line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
inserted line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
inserted line
learn more about dummy text.
Za každý řádek připojte řetězec:
$ sed 'a \Appended line' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Appended line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Appended line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Appended line
learn more about dummy text.
Appended line
14. Extrahujte uživatelská jména ze souboru /etc/passwd
Příkaz Sed lze snadno použít k získání celého seznamu všech uživatelských jmen ze souboru '/etc/passwd'.
Následující příkaz sed extrahuje všechna dostupná uživatelská jména pro linux:
$ sed 's/\([^:]*\).*/\1/' /etc/passwd root daemon bin sys sync man lp news uucp proxy backup list gnats nobody systemd-network systemd-resolve syslog messagebus uuidd debian-spamd
admin
15. Tisk řádku bez komentovaných řádků (#) a prázdných řádků
Tisk bez komentovaných (#) řádků a prázdných řádků je jednoduchý se sed.
Můžeme provést následující příkaz a vytisknout všechny řádky, které neobsahují symbol komentáře (#) a všechny prázdné řádky.
$ sed -e 's/#.*//;/^$/d' content.txt
Chcete-li odstranit pouze komentované řádky:
$ sed -e 's/#.*//' content.txt
16. Extrahujte všechny IP adresy pomocí sed z řetězce
Podívejme se, jak extrahovat IP adresy pomocí příkazu sed s regulárním výrazem. Do souboru 'content.txt' jsem přidal několik IP adres pro testování.
$ cat content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Nyní použijte regex k extrahování IP adresy ze souboru 'content.txt' následovně:
$ sed '/\n/!s/[0-9.]\+/\n&\n/;/^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\n/P;D' content.txt
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Našel jsem další snadný příkaz pro získání stejných výsledků, zkontrolujte níže:
$ sed -n '/[0-9]/p' content.txt.bak
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Můžeme také kombinovat sed s jiným příkazem pomocí potrubí (|), viz příklad níže:
$ ip addr | sed -n '/inet/p' | sed -e 's/ */ /g' | cut -d ' ' -f3
127.0.0.1/8
::1/128
75.208.225.10/24
2600:3c02::e03c:92ff:fe60:d7e2/64
fe80::f03c:92ef:fe60:d7e2/64
17. Přesměrování a zápis do souboru
w
flag lze použít k zápisu výstupu do souboru namísto tisku na standardní výstup. w
příkaz vyžaduje název souboru, do kterého bude zapsán výstup.
Následující příkaz sed přesměruje výstup do nového souboru 'rootpwd.txt':
$ sed -n '/root/w rootpwd.txt' /etc/passwd
$ cat rootpwd.txt
root:x:0:0:root:/root:/bin/bash
Závěr
V tomto tutoriálu příkazů pro Linux jsme se naučili základní syntaxi příkazu sed a s nejběžněji a nejpoužívanějšími příklady sed. Je možné použít sed ve skriptování bash nebo shell k provádění různých automatizovaných úloh při manipulaci s textem a operacích sed v prostředí Linuxu. Pomocí tohoto tutoriálu lze snadno porozumět sed a v případě potřeby okamžitě začít s implementací. Pokud máte nějaké dotazy, návrhy nebo zpětnou vazbu, napište je do pole pro komentáře níže.