Search & Replace su più file da riga di comando
Inserito Mar,
Se vogliamo sostituire del testo su tutti i file che contengono il testo originale all'interno di un percorso possiamo fare in questo modo:
grep -RlZ "TESTO_ORIGINALE" . | xargs -0 -l sed -i -e 's/TESTO_ORIGINALE_ESC/TESTO_DA_SOSTITUIRE_ESC/g'Per *_ESC intendo che il testo deve considerare l'escaping delle "/".
Ad esempio:
grep -RlZ "/system_home/eric/" . | xargs -0 -l sed -i -e 's/\/system_home\/eric\//\/home\/eric_arch\//g'Sostituisce tutti i /system_home/eric/ con /home/eric_arch/.
Il grep iniziale è una ottimizzazione per evitare di fare il search & replace di tutti i file. Per vedere se sta estranendo i file giusti:
grep -RlZ "/system_home/eric/" . | xargs -0 -l echoSe si ha necessità di fare una ricerca usando espressioni regolari si può valutare l'uso di egrep invece di grep.
egrep -lRZ "\.jpg|\.png|\.gif" . | xargs -0 -l sed -i -e 's/\.jpg\|\.gif\|\.png/.bmp/g'Se invece vogliamo fare il search & replace solo su certi file, ottenibili tramite un find, possiamo usare questa forma:
find . -name *.txt -exec sed -i "s/SEARCH/REPLACE/" {} \;Fa un replace su tutti i file .TXT

Commenti
Non ci sono ancora commenti.
Lascia un commento
Il tuo indirizzo email non sarà pubblicato. I commenti vengono pubblicati dopo la moderazione.