Comment trouver et remplacer une chaîne en ligne de commande dans plusieurs fichiers sous Unix?
il existe de nombreuses façons. Mais l'une des réponses serait:
find . -name '*.html' |xargs Perl -pi -e 's/find/replace/g'
Comme la solution Zombie (et plus rapide je suppose) mais avec sed (standard sur de nombreuses distributions et OSX) au lieu de Perl:
find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'
Cela remplacera toutes les occurrences foo dans vos fichiers Python sous le répertoire actuel par et créez une sauvegarde pour chaque fichier avec l'extension . py.bak .
Et pour supprimer les fichiers de .bak:
find . -name "*.bak" -delete
J'ai toujours fait ça avec scripts ed ou ex scripts .
for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof
La commande ex n'est que le mode: ligne de vi.
Utiliser find et sed avec un nom ou des répertoires avec de l'espace utilisez ceci:
find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'
avec le shell bash récent, et en supposant que vous n'avez pas besoin de parcourir les répertoires
for file in *.txt
do
while read -r line
do
echo ${line//find/replace} > temp
done <"file"
mv temp "$file"
done