Ú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ásedpříkaz k zápisu výsledků do souboru namísto standardního výstupu.soznač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.gje 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.