trovare e sostituire in più file sulla linea di comando
-
19-09-2019 - |
Domanda
Come faccio a trovare e sostituire una stringa sulla riga di comando in più file su UNIX?
Soluzione
ci sono molti modi .Ma una delle risposte potrebbe essere:
find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'
Altri suggerimenti
Come la soluzione di Zombie (e più veloce suppongo) ma con sed (di serie su molte distribuzioni e OSX) invece di Perl:
find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'
Questo sostituirà tutti pippo occorrenze nei file Python sotto la directory corrente con bar e creare un backup per ciascun file con il .py.bak estensione.
E per rimuovere de .bak file:
find . -name "*.bak" -delete
ho sempre fatto con script ndr o ex script .
for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof
Il ex di comando è proprio il:. Modalità linea dal VI
Utilizzo trovare e sed con il nome o le directory con l'utilizzo dello spazio in questo modo:
find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'
con la recente shell bash, e supponendo che non c'è bisogno di attraversare le directory
for file in *.txt
do
while read -r line
do
echo ${line//find/replace} > temp
done <"file"
mv temp "$file"
done