Tato otázka již má odpovědi zde :
Komentáře
- Chcete sed, ne grep. Také ' používáte " smart " uvozovky, takže grep bude hledat doslovný řetězec
“string”
včetně uvozovek. Chcete"string"
(nebo pravděpodobně ještě lepší,'string'
, pokud ve vyhledávacím dotazu neplánujete použití rozšíření parametrů). -
grep
není použit ' k nahrazení řetězců. Používá se ' k vyhledání řetězců. Chcete-li je nahradit, potřebujetesed
neboawk
. - Bylo by to něco jako
- sed –recursive –ignore-case " řetězec ", " nahrazení -string "
- Související: hledat a nahrazovat pomocí grep (ne sed) – nicméně můžete použít
grep --recursive --files-with-matches
k vytvoření seznamu názvů souborů, které mají být předánysed
Odpověď
Zkuste tento příkaz
grep -rl "wavbyte" somedir/ | xargs sed -i "s/wavbyte/gitship/g"
Můžete zkuste find
a sed
find /some_path -type f -exec sed -i "s/oldstring/newstring/g" {} \;
komentáře
- Nahradím " matchstring " novým nebo starým řetězcem a co když chci udělat to z kořenového adresáře serveru?
- Například když nahrazuji " wavbyte " s " gitship " od kořenový adresář serveru Ubuntu by to byl:
- find / -type f -exec sed -i ' s / wavbyte / gitship / g ' {} \;
- Správně, ale wavbyte je na serveru na mnoha různých místech. Jak si zapamatuji všechna tato místa a poté ručně vstoupím a přejdu na gitship?
- Pojďme pokračovat v této diskusi v chatu .