rechercher et remplacer dans plusieurs fichiers en ligne de commande
-
19-09-2019 - |
Question
Comment puis-je trouver et remplacer une chaîne en ligne de commande dans plusieurs fichiers sur unix?
La solution
il y a plusieurs façons .Mais l'une des réponses serait:
find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'
Autres conseils
Comme la solution Zombie (et plus rapide, je suppose), mais avec sed (standard sur de nombreux distros et OSX) au lieu de Perl:
find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'
Cela remplacera tous les foo occurences dans vos fichiers Python sous le répertoire courant avec bar et créer une sauvegarde pour chaque fichier avec .py.bak l'extension.
Et pour supprimer les fichiers de .bak:
find . -name "*.bak" -delete
J'ai toujours fait ça avec scripts ed ou scripts ex .
for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof
ex commande est juste le:. Mode ligne de vi
Utilisation de trouver et sed avec le nom ou les répertoires avec l'utilisation de l'espace 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 traverser les répertoires
for file in *.txt
do
while read -r line
do
echo ${line//find/replace} > temp
done <"file"
mv temp "$file"
done