Úvod
sed (s tream ed itor) je řádkově orientovaný nástroj pro analýzu a transformaci textu. sed
příkaz používá jednoduchý programovací jazyk a regulární výrazy ke zpracování textových proudů a souborů. Nejpoužívanější funkce sed
příkaz je substituce řetězce.
Tato příručka ukazuje, jak používat sed
najít a nahradit řetězce pomocí příkladů.

Předpoklady
- Přístup k příkazovému řádku/terminálu.
- Textový soubor (tato příručka obsahuje soubor example.txt soubor).
- Základní příkazy terminálu (stáhněte si náš bezplatný cheat sheet).
sed Najít a nahradit syntaxi
Syntaxe pro vyhledání a nahrazení textu pomocí sed
příkaz je:
sed -i 's/<search regex>/<replacement>/g' <input file>
Příkaz se skládá z následujícího:
-i
říkásed
příkaz k zápisu výsledků do souboru namísto standardního výstupu.s
označuje náhradní příkaz./
je nejběžnějším oddělovacím znakem. Příkaz také přijímá další znaky jako oddělovače, což je užitečné, když řetězec obsahuje lomítka.<search regex>
je vyhledávací parametr řetězce nebo regulárního výrazu.<replacement>
je náhradní text.g
je globální příznak nahrazení, který nahrazuje všechny výskyty řetězce namísto pouze prvního.<input file>
je soubor, ve kterém probíhá vyhledávání a nahrazování.
Jednoduché uvozovky pomáhají vyhnout se rozšíření metaznaků v shellu.
Verze BDS sed
(který zahrnuje macOS) nepodporuje párování bez rozlišení velkých a malých písmen ani nahrazování souborů. Příkaz pro nahrazení souboru vypadá takto:
sed 's/<search regex>/<replacement>/g' <input file> > <output file>
Případně nainstalujte GNU verzi sed
na macOS s homebrew:
brew install gnu-sed
Spusťte GNU sed
příkaz takto:
gsed -i 's/<search regex>/<replacement>/g' <input file>
Nahraďte sed
příkaz s gsed
postupujte podle níže uvedených příkladů.
sed příklady nahrazení
Příklady z této příručky používají k nahrazení řetězců vzorový soubor.
1. Vytvořte ukázkový textový soubor:
nano example.txt
2. Přidejte následující obsah:
foobarbazfoobarbaz
foo bar baz foo bar baz
Foo Bar Baz Foo Bar Baz
FOO BAR BAZ FOO BAR BAZ
/foo/bar/baz /foo/bar/baz

Použijte soubor jako vstup pro otestování níže uvedených příkladů.
Poznámka :Za celých sed
výukový program příkazů pro Linux, podívejte se na naši příručku příkazů sed Linux.
Nahradit první odpovídající řetězec
1. Chcete-li nahradit první nalezený výskyt slova bar s linuxem v každém řádku souboru spusťte:
sed -i 's/bar/linux/' example.txt
2. -i
tag vloží změny do example.txt soubor. Zkontrolujte obsah souboru pomocí příkazu cat:
cat example.txt

Příkaz nahradí první výskyt bar s linuxem v každém řádku, včetně podřetězců. Shoda je přesná, ignoruje variace velkých písmen.
Globální nahrazení
Chcete-li nahradit každou shodu řetězce v souboru, přidejte g
příznak do skriptu. Například:
sed -i 's/bar/linux/g' example.txt

Příkaz globálně nahradí každou instanci bar s linuxem v souboru.
Přiřazení a nahrazení všech případů
Chcete-li najít a nahradit všechny výskyty slova a ignorovat velká písmena, použijte I
parametr:
sed -i 's/bar/linux/gI' example.txt

Příkaz nahradí všechny výskyty slova bar v textu bez ohledu na velká písmena.
Ignorovat podřetězce
Přidejte hranice slov (\b
) na sed
příkaz ignorovat podřetězce při nahrazování řetězců v souboru. Například:
sed -i 's/\bbar\b/linux/gI' example.txt
Případně změňte oddělovač, aby byl příkaz snadněji čitelný:
sed -i 's:\bbar\b:linux:gI' example.txt

Příkaz ignoruje podřetězce a odpovídá pouze celému slovu.
Najít a nahradit řetězce lomítky
Escape znak lomítka najít a nahradit řetězec lomítky. Chcete-li například nahradit /foo/bar/baz pomocí /home/kb , použijte následující syntaxi:
sed -i 's/\/foo\/bar\/baz/\/home\/kb/g' example.txt
Případně změňte oddělovač, abyste se vyhnuli escapování:
sed -i 's:/foo/bar/baz:/home/kb:g' example.txt

Tuto syntaxi použijte k nahrazení cest a jiných řetězců lomítky.
Najít a nahradit regulárními výrazy
Vzor vyhledávání pro sed
příkaz přijímá regulární výrazy, podobně jako grep regex. Chcete-li například porovnat všechna velká písmena a nahradit je 5 , použijte:
sed -i 's/[A-Z]/5/g' example.txt

Vzor regulárního výrazu pomáhá najít všechna velká písmena a nahradí je číslem v souboru.
Referenční nalezený řetězec
Použijte znak ampersand (&
) pro odkaz na nalezený řetězec. Chcete-li například přidat lomítko (/ ) před každou instancí foo v souboru použijte:
sed -i 's/foo/\/&/gI'example.txt

Místo přepisování vyhledávacího parametru &
znak odkazuje na nalezený řetězec.
Vytvořit zálohu
Chcete-li vytvořit záložní soubor před přepsáním existujícího souboru, přidejte .bak
parametr na -i
tag.
sed -i.bak 's/foo/FOO/g' example.txt

Příkaz vytvoří zálohu (example.txt.bak
) před přepsáním originálu. Tuto metodu použijte, chcete-li zachovat kopii v původním formátu a vyhnout se přepsání.
Rekurzivní hledání a nahrazení
Pomocí příkazu find vyhledejte soubory a zkombinujte je s sed
rekurzivně nahrazovat řetězce v souborech. Například:
find -name 'example*' -exec sed -i 's/[a-z]/5/gI' {} +

Příkaz najde všechny soubory začínající příkladem a provede sed
příkaz na soubory. Provedený příkaz nahradí všechna písmena 5 , bez ohledu na velká písmena.
Závěr
Poté, co si projdete příklady v této příručce, víte, jak používat sed
k nahrazení řetězců v souborech. sed
command je výkonný nástroj pro manipulaci s textem s mnoha pokročilými funkcemi.
Dále se podívejte na příkaz awk nebo gawk, kde se dozvíte o dalších nástrojích pro manipulaci s textem.