GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak používat příkaz SED k vyhledání a nahrazení řetězce v souborech

Úvod

Sed je zkratka pro S tream ED itor. Je to linuxový příkaz používaný 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.

Tento článek vysvětlí podrobnosti použití příkazu Sed k vyhledání a nahrazení řetězců v souborech.

Všechny příklady v tomto tutoriálu byly provedeny na Ubuntu 20.04.

Najít a nahradit

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

Výstup bude něco takového:

Základní syntaxe použití příkazu Sed k vyhledání a nahrazení textu je:

$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE

Ve kterém:

-i:Tato volba umožňuje příkazu Sed upravovat soubory na místě mí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 linuxways.net 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

Výstup:

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

Výstup:

Jak vidíte, v předchozím příkladu je také umístěn test podřetězce uvnitř řetězce testbar. Pokud nechcete nahradit podřetězec ve vzoru vyhledávání, umístěte vzor vyhledávání mezi dvě hranice slova \b:

$ sed -i 's/\btest\b/linux/g' test.txt

Výstup:

Aby se ve vyhledávacím vzoru nerozlišovala malá a velká písmena, použijte příznak I:

$ sed -i 's/test/linux/gI' test.txt

Výstup:

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

Výstup:

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 ‚way‘ řetězcem ‚road‘ ve všech souborech v aktuálním adresáři.

$ find . -type f -exec sed -i 's/way/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/way/road/g'

Závěr

Prošli jste některými běžnými příklady použití příkazu Sed. Vyhledávání a nahrazování řetězce textu v souboru pomocí příkazu Sed není složité, jak si představujete.

Pokud máte nějaké obavy, dejte mi vědět v sekci komentářů.


Ubuntu
  1. Použijte příkaz SED k vyhledání a nahrazení řetězce v souborech – Jak provést tento úkol na Ubuntu?

  2. Jak nahradit řetězec v souboru (souborech)?

  3. Použití grep a sed k nalezení a nahrazení řetězce

  1. Hledání souborů v příkazovém řádku (jak na to)

  2. Jak používat příkaz Grep k vyhledání textu v souborech

  3. Jak nahradit řetězec ve více souborech v příkazovém řádku linuxu

  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Jak použít Sed k výměně víceřádkového řetězce?

  3. Jak používat Linuxový příkaz find k hledání souborů