Cette question a déjà des réponses ici :
Commentaires
- Vous voulez sed, pas grep. De plus, vous ' utilisez des guillemets " intelligents ", donc grep recherchera les chaîne littérale
“string”
, y compris les guillemets. Vous voulez"string"
(ou probablement encore mieux,'string'
, sauf si vous prévoyez dutiliser lexpansion des paramètres dans le terme de recherche). -
grep
isn ' t utilisé pour remplacer des chaînes. Il ' est utilisé pour rechercher des chaînes. Pour les remplacer, vous avez besoin desed
ouawk
. - Ce serait donc quelque chose comme
- sed –recursive –ignore-case " string ", " remplacement -string "
- Connexes: rechercher et remplacer en utilisant grep (pas sed) – cependant vous pourriez utiliser
grep --recursive --files-with-matches
pour construire une liste de noms de fichiers à transmettre àsed
Réponse
Essayez cette commande
grep -rl "wavbyte" somedir/ | xargs sed -i "s/wavbyte/gitship/g"
Vous pouvez essayez find
et sed
find /some_path -type f -exec sed -i "s/oldstring/newstring/g" {} \;
Commentaires
- Dois-je remplacer " matchstring " par la nouvelle ou lancienne chaîne et si je veux le faire depuis le répertoire racine du serveur?
- Par exemple si je remplace " wavbyte " avec " gitship " de le répertoire racine du serveur Ubuntu serait-il:
- find / -type f -exec sed -i ' s / wavbyte / gitship / g ' {} \;
- Daccord, mais wavbyte est à de nombreux endroits différents sur le serveur. Comment vais-je mémoriser tous ces emplacements, puis entrer manuellement et passer à gitship?
- Laissez-nous continuer cette discussion dans le chat .