2010-09-03 7 views
1

Bonjour J'ai un collègue qui est un développeur de code procédural et qui a le même nom de serveur smtp assis dans 120 fichiers différents, maintenant je dois les changer pour quelque chose d'autre. Mais le faire un par un serait impossible. J'utilise "grep" pour rechercher récursivement une chaîne dans tous les fichiers situés dans ce répertoire. Mais je ne suis pas sûr si grep peut modifier le fichier et le remplacer par la nouvelle chaîne.Script Shell pour trouver et remplacer une chaîne

Merci

Répondre

4

ne devrait pas être sur cette serverfault? De toute façon, vous devriez regarder une combinaison de find et sed.

Peut-être quelque chose comme:

find . -iname "<filepattern>" -exec sed -e "s/<regex to look for>/<replacement>/g" -i {} \; 
1
find /directory -type f -exec sed -i 's/oldname/newname/g' {} + 

recherches récursive par /directory et utilise sed pour faire une recherche et remplacer. Le {} est remplacé par les noms de fichier trouvés.

0

Peut-être quelque chose comme ça?

find /path/to/start/from/ -type f | xargs perl -pi -e 's/textToFind/TextToReplace/g'

2

Utilisez sed. Ce qui signifie que vous trouverez tous les fichiers contenant smtp1.example.com;

grep -rl smtp1.example.com . | xargs sed -i 's/smtp1.example.com/smtp2.example.com/g' 
sortir leurs noms; passez chaque nom de fichier à la commande sed, qui effectue une recherche et un remplacement sur chaque fichier.

grep listera uniquement les fichiers qui contiennent réellement le texte; cela minimise le nombre de fichiers pour lesquels sed est appelé. (L'utilisation de find -type f entraîne l'appel de sed sur n'importe quel fichier.)

Questions connexes