Ho un file con i seguenti contenuti:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
e ho bisogno di creare uno script che cambi il "nome" nella prima riga in "qualcosa", la "password" nella seconda riga in "qualcosa" e il "nome" nella terza riga in "qualcosa di diverso". Non posso fare affidamento sull'ordine in cui questi si verificano nel file, quindi non posso semplicemente sostituire la prima occorrenza di "nome" con "qualcosa" e la seconda occorrenza di "nome" con "qualcosa di diverso". In realtà ho bisogno di fare una ricerca per le stringhe circostanti per essere sicuro di trovare e sostituire la cosa corretta.
Finora ho provato questo comando per trovare e sostituire la prima occorrenza del "nome":
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
tuttavia non funziona, quindi sto pensando che alcuni di questi personaggi potrebbero aver bisogno di scappare, ecc.
Idealmente, mi piacerebbe poter usare regex solo per abbinare le due occorrenze "username" e sostituire solo il "nome". Qualcosa del genere ma con sed
:
<username>.+?(name).+?</username>
e sostituisci il contenuto tra parentesi con "qualcosa".
È possibile?