Trova e sostituisci testo in più documenti dalla riga di comando

Se sei a tuo agio con la riga di comando e mai in una situazione in cui devi trovare e sostituire una parola, una frase, un URL o un carattere attraverso un gruppo di più documenti di testo, perl fa abbastanza bene il lavoro. Una semplice stringa di comando eseguirà molto rapidamente un gruppo di ricerca e sostituzione sul testo, sia in un singolo documento che in un gruppo di più documenti.

Come molte cose nella riga di comando, non c'è un processo di conferma, quindi ti consigliamo di assicurarti che la tua sintassi sia impostata correttamente prima di iniziare un comando, altrimenti potresti dover eseguire un'altra ricerca e sostituzione per riparare l'errore di digitazione.

La sintassi del comando di base è la seguente:

perl -pi -w -e 's/THIS/THAT/g;' /path/to/files*.txt

Per un singolo esempio di parola, se è necessario sostituire tutte le istanze di "ogre" con "cornbread" in ogni file .txt all'interno della cartella "Documenti", si utilizzerà il seguente comando:

perl -pi -w -e 's/ogre/cornbread/g;' ~/Documents/*.txt

Per un esempio di ricerca e sostituzione di un'intera frase, supponiamo che sostituiremo l'intera frase "The Chocolate Factory" con "The Wizard of Oz" in un gruppo di file .txt che iniziano con "Films" memorizzati nei Documenti directory:

perl -pi -w -e 's/The Chocolate Factory/The Wizard of Oz/g;' ~/Documents/Films*.txt

La ricerca e la sostituzione vengono eseguite immediatamente. È possibile ricontrollare la modifica utilizzando cat e grep per verificare:

cat ~/Documents/Films124.txt |grep "Wizard of Oz"

Certo, questo è abbastanza avanzato, e sì, la ricerca e la sostituzione di lotti tramite più documenti possono essere fatti in modo più user friendly attraverso app GUI come TextWrangler e BBEdit, ma a volte la riga di comando è più veloce per operazioni veloci come questa e altre che sono simili, in più non richiede alcun download aggiuntivo da utilizzare.

Un bel pollice in su per Lifehacker per l'eccellente trucco.

Aggiornamento : il comando 'sed' è un altro modo per fare una ricerca rapida e sostituirla tramite la riga di comando. La copertura sed è principalmente un argomento per un altro articolo, ma la sintassi di base dell'uso di sed per questo compito è un po 'più semplice e quindi più facile da ricordare:

sed -i 's/THIS/THAT/g' /path/to/files*.txt

Non esiste un modo giusto o sbagliato, quindi se si utilizza perl o sed diventa una questione di preferenza personale.