Question

Comment puis-je trouver et remplacer une chaîne en ligne de commande dans plusieurs fichiers sur unix?

Était-ce utile?

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 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top