Domanda

Come faccio a trovare e sostituire una stringa sulla riga di comando in più file su UNIX?

È stato utile?

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 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top