Sostituzioni di testo multilinea in un file con sed

Postato da ROb | nella categoria Linux | venerdì, 12 marzo 2010

0

Proprio ieri ho dovuto necessità di costruire uno script che mi permettesse di sostituire in un file xml n occorrenze di un certo tag con il contenuto di un altro file xml.

sostituzione sed

Probabilmente esistono mille modi diversi per farlo, come mi avete sempre insegnato con i vostri mitici commenti.
Voglio postare la soluzione che ho trovato girovagando qua e là nei vari forum e che nel mio caso ha funzionato alla perfezione sfruttando la bash e il comando sed.

Valorizziamo innanzitutto la variabile str che contiene il testo da rimpiazzare.
Sia test.xml il file che contiene la stringa da rimpiazzare e contenuto.xml il file con il testo da sostiruire nel file test.xml al posto della stringa contenuta nella variabile str, ecco il comando sed che permette di farlo:

str="<rimpiazzo\/>"
sed -e "/$str/r contenuto.xml" -e "/$str/d" test.xml

Questi sono i due file xml:

test.xml

<prova>

  <rimpiazzo/>

</prova>

contenuto.xml

   <rimpiazzo>
      ciao
   </rimpiazzo>

Prima si valorizza la variabile str con il testo da rimpiazzare (in questo caso il testo rimpiazzo) quindi si lancia il comando sed.
E’ importante notare che il testo da rimpiazzare valorizzato nella variabile str deve essere valorizzato secondo la sintassi sed quindi con l’escaping di eventuali caratteri speciali sed o di espressioni regolare. In questo caso è stato fatto l’escaping del carattere /.

Ecco l’output in console ottenuto dal comando:

<prova>

   <rimpiazzo>
      ciao
   </rimpiazzo>

</prova>

Fusione xml completata!

Scrivi un commento