stringa Bash: qualsiasi comando per sostituire le stringhe nei file di testo?




sed unix (6)

Ho una gerarchia di directory che contiene molti file di testo. Vorrei cercare una determinata stringa di testo ogni volta che viene visualizzata in uno dei file e sostituirla con un'altra stringa. Ad esempio, potrei voler sostituire ogni occorrenza della stringa "Coca Cola" con "Pepsi". Qualcuno sa come fare questo? Mi chiedo se esiste una sorta di comando di Bash che può farlo senza dover caricare tutti questi file in un editor, o inventare uno script più complesso per farlo.

Ho trovato questa pagina che spiega un trucco usando sed, ma non sembra funzionare nei file nelle sottodirectory.


Combina sed con find in questo modo:

find . -name "file.*" -exec sed -i 's/Coke/Pepsi/g' {} \;


find . -type f -exec sed -i 's/old-word/new-word/g' {} \;


vuoi una combinazione di find e sed


Di solito lo faccio in perl. Tuttavia, fai attenzione - utilizza le espressioni regolari che sono molto più potenti della normale sostituzione delle stringhe:

% perl -pi -e 's/Coke/Pepsi/g;' $filename

EDIT Ho dimenticato le sottodirectory

% find ./ -exec perl -pi -e 's/Coke/Pepsi/g;' {} \;

IMO, lo strumento con l'utilizzo più semplice per questa attività è rpl :

rpl -R Coke Pepsi .

( -R è per la sostituzione ricorsiva in tutte le sottodirectory)







text-processing