Sed je zkratka pro stream editor. Přečte daný soubor a upraví vstup, jak je určeno seznamem příkazů sed.
Ve výchozím nastavení je vstup zapsán na obrazovku, ale můžete vynutit aktualizaci souboru.
Příkaz Sed (Stream EDitor) Linux se používá k vyhledávání, hledání a nahrazování nebo vkládání a mazání slov a řádků v textovém souboru.
Nejčastějším případem použití příkazu Sed je vyhledání a nahrazení řetězců v souborech. Při použití příkazu Sed můžete upravovat soubory, aniž byste je otevírali.
Zde v LinuxAPT, jako součást našich služeb správy serveru, pravidelně pomáháme našim zákazníkům provádět dotazy související se servery Linux.
V této souvislosti se podíváme na to, jak použít příkaz Sed k nalezení a nahrazení řetězců v souborech v systému Ubuntu 20.04.
Najít a nahradit v Ubuntu
Ve výchozím nastavení je Sed nainstalován ve většině distribucí Linuxu. Instalaci Sed na vašem systému Linux můžete ověřit spuštěním:
$ sed --v
Základní syntaxe použití příkazu Sed k vyhledání a nahrazení textu je:
$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE
Kde:
-i:Tato volba umožňuje příkazu Sed upravovat soubory na místě namísto zápisu výstupu na standardní výstup.
s:To znamená náhradní.
/ /:Oddělovací znaky.
g:Je to globální příznak nahrazení.
FILE:Soubor, se kterým chcete manipulovat pomocí příkazu Sed.
Důrazně se doporučuje umístit vyhledávací vzor, náhradní vzor a další argumenty do uvozovek.
Zde je například textový soubor, který byl použit pro demonstraci:
567 Test test test
test /bin/zsh linuxapt.com testbar 789
Chcete-li nahradit všechna „testovací“ slova slovy „linux“, spusťte následující příkaz:
$ sed -i 's/test/linux/g' test.txt
Pokud nepoužijete příznak g, bude nahrazen pouze první výskyt vyhledávacího vzoru v každém řádku:
$ sed -i 's/test/linux/' test.txt
Aby se ve vyhledávacím vzoru nerozlišovala velká a malá písmena, použijte příznak I:
$ sed -i 's/test/linux/gI' test.txt
Ve světě Linuxu se setkáme s mnoha případy použití, které mají oddělovací znaky v textových souborech.
K oddělení oddělovacích znaků musíme použít zpětné lomítko \.
Chcete-li například nahradit /bin/zsh /usr/bin/bash, spusťte:
$ sed -i 's/\/bin\/zsh/\/usr\/bin\/bash/g' test.txt
Rekurzivní hledání a nahrazení
V mnoha případech chcete rekurzivně vyhledávat v adresářích soubory, které mají určitý řetězec, a nahradit tento řetězec ve všech souborech.
Například následující příkaz vyhledá a nahradí řetězec 'apt' řetězcem 'road' ve všech souborech v aktuálním adresáři.
$ find . -type f -exec sed -i 's/apt/road/g' {} +
Pokud názvy souborů obsahují mezery, použijte volbu -print0:
$ find . -type f -print0 | xargs -0 sed -i 's/way/road/g'
Chcete-li vyhledat a nahradit řetězec pouze u souborů, které mají určitou příponu, spusťte:
$ find . -type f -name "*.java" -print0 | xargs -0 sed -i 's/apt/road/g'