GNU/Linux >> Znalost Linux >  >> Linux

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

Můžete použít find a -exec přímo do sed místo toho, abyste nejprve hledali oldstr s grep . Možná je to trochu méně efektivní, ale to nemusí být důležité. Tímto způsobem sed nahrazení se provede u všech souborů uvedených v find , ale pokud oldstr není tam, evidentně to nebude fungovat.

find /path -type f -exec sed -i 's/oldstr/newstr/g' {} \;

Vaše řešení je v pořádku. zkuste to pouze tímto způsobem:

files=$(grep -rl oldstr path) && echo $files | xargs sed....

takže spusťte xargs pouze když grep vrátí 0 , např. když našel řetězec v některých souborech.


Vzal jsem Vladův nápad a trochu ho změnil. Místo

grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' /dev/null

Což dává

sed: couldn't edit /dev/null: not a regular file

Dělám ve 3 různých připojeních ke vzdálenému serveru

touch deleteme
grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' ./deleteme
rm deleteme

I když je to méně elegantní a vyžaduje 2 další připojení k serveru (možná existuje způsob, jak to udělat vše na jednom řádku), funguje to také efektivně


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

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

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

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

  2. Příklady manipulace s bashovým řetězcem – délka, podřetězec, najít a nahradit

  3. Najít a nahradit sed v adresáři a podadresářích

  1. Hledání spustitelných souborů pomocí ls a grep

  2. Najít a nahradit ve skriptování shellu

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