Ricercare e sostituire testo in un file da terminale linux

In linux la ricerca e la sostituzione di testo in un file può essere effettuata efficacemente facendo ricorso al comando sed  ( stream editor )

sed -i 's/testo da sostituire/nuovo testo/g' file.txt

esempio

sed -i -e 's/database_name_here/wordpress/g' wp-config.php

opzioni/argomenti :

  • -i = in-place (i.e. salva la modifica sul file di origine )
  • formato della stringa di comando :
    • s-> è il comando di sostituzione
    • / -> il separatore si possono utilizzare anche altri separatori ad esempio il pipe |
    • testo da sotituire  ->  regular expression che descrive la parola/testo da sostituire
    • nuovo testo -> il nuovo testo che andrà a sostituire il testo ricercato
    • g -> global indica che devono essere sostuite tutte le occorrenze trovate non solo la prima
  • file.txt -> il nome del file in cui effettuare la ricerca

Ricerca e sostituzione di una stringa in più files

Il modo più semplice se i file sono nella stessa directory emagari dello stesso tipo

sed -i 's|testo da sostituire|nuovo testo|g' *.txt

Un comando di utilizzo più generale sfrutta  grep per ricercare i file e sed  per la sostituzione

si ricercano  con grep i file che contengono il testo da sotituire

grep -rl testo-da-sostituire directory/

al solito sed per la sostituzione

sed -i 's|testo da sostituire|nuovo testo|g'

e

xargs consente di trasmettere a un comando l’output di un comando precedente come argomento

grep -rl testo-da-sostituire  directory/  | xarg  sed -i 's|testo da sostituire|nuovo testo|g'

esempio:

grep -rl mydb wp/ | xargs sed -i -e 's|database_name_here|wordpress|'
o
grep -rl mydb wp/ | xargs sed -i -e 's@database_name_here@wordpress@'

opzioni grep usate:

  • -r  -> ricorsivo
  • -l  ->  solo files contenenti i caratteri specificati ( with match )

Altra possibilità

ricerca e sostituzione di testo in più files utilizzando find e sed

find . -type f -name "*.txt" -exec sed -i -e 's|-c.wav|-C.wav|g' {} \;

Risorse:

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

w

Connessione a %s...