Domanda :come faccio a sostituire tutte le occorrenze di una parola in tutti i file nella cartella specificata?
Considera uno scenario problematico in cui hai un sito Web in cui fai spesso riferimento all'anno in corso. Ogni anno è necessario aggiornare l'anno. Puoi trovare facilmente tutte le occorrenze in tutti i file, ma dovresti evitare di modificare manualmente l'anno, uno per uno, in ogni file.
Soluzione
Allora cosa fai? Uno dei vari modi per trovare tutte le occorrenze e quindi sostituire il termine cercato consiste nell'usare una combinazione di comandi find e sed.
Puoi farlo facilmente con un solo comando:in questo esempio, hai 50 pagine web nella cartella delle pagine. Questo comando cambierà istantaneamente tutte le occorrenze di "2017" in "2018":
find ~/public_html/my_website/pages -type f -exec sed -i 's/2017/2018/g' {} \;
Per rendere l'esempio sopra un po' più generico, ecco cosa devi fare:
find <path_to_directory> -type f -exec sed -i 's/<search_text>/<replace_text>/g' {} \;
Nel comando precedente, sostituisci
Spiegazione
Quello che stai facendo qui è che stai usando il comando find per ottenere tutti i file nelle directory correnti e nelle sue sottodirectory. L'opzione -type f assicura di ottenere solo i file, non le directory.
E poi passi il risultato usando il comando exec al comando sed. Il comando sed cerca il testo e lo sostituisce.
Il {} \; fa parte del comando exec. Lo spazio tra } e \ è obbligatorio.
Questo suggerimento rapido per Linux è stato suggerito da Lettore del manuale Linux, Jane Hadley. Hai una soluzione migliore per questo problema? Condividilo nei commenti.