GNU/Linux >> Znalost Linux >  >> Linux

Rekurzivní vyhledávání a nahrazování v textových souborech na Macu a Linuxu

Pro Mac by byl podobný přístup tento:

find . -name '*.txt' -print0 | xargs -0 sed -i "" "s/form/forms/g"

Jako alternativní řešení používám toto na Mac OSX 10.7.5

grep -ilr 'old-word' * | xargs [email protected] sed -i '' 's/old-word/new-word/g' @

Poděkování patří:Odpověď Todda Cesere


OS X používá kombinaci nástrojů BSD a GNU, takže je nejlepší vždy zkontrolovat dokumentaci (i když jsem to měl takto less neodpovídal ani manuálové stránce OS X):

https://web.archive.org/web/20170808213955/https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html

sed přebírá argument po -i jako rozšíření pro zálohy. Zadejte prázdný řetězec (-i '' ) bez zálohování.

Mělo by fungovat následující:

find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +

-type f je jen dobrá praxe; sed si bude stěžovat, pokud mu dáte adresář nebo tak.

-exec je preferován před xargs; nemusíte se obtěžovat s -print0 nebo cokoli.

{} + na konci znamená, že find připojí všechny výsledky jako argumenty k jedné instanci volaného příkazu, místo aby jej znovu spouštěl pro každý výsledek. (Jednou výjimkou je případ, kdy je porušen maximální počet argumentů příkazového řádku povolený operačním systémem; v takovém případě find spustí více než jednu instanci.)

Pokud se zobrazí chyba jako „neplatná sekvence bajtů“, může pomoci vynutit standardní národní prostředí přidáním LC_ALL=C na začátku příkazu, například takto:

LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +


Linux
  1. Otestovat rekurzivní vyhledávání a výměnu Sed před spuštěním?

  2. Použijte Najít a najít k vyhledání souborů v Linuxu

  3. Linux Odstraňte soubory a adresáře

  1. Použití sed k nalezení a nahrazení textových souborů v Linuxu

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

  3. Seagate Momentus XT poškozuje soubory (Linux a Mac)

  1. Použití příkazů Sed,ex a perl k vyhledání a nahrazení textu v Linuxu

  2. Příkazový řádek:vyhledejte a nahraďte všechny názvy souborů odpovídající grep

  3. najít odpovídající text a nahradit další řádek