Saya punya file dengan konten berikut:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
dan saya perlu membuat skrip yang mengubah "nama" di baris pertama menjadi "sesuatu", "kata sandi" di baris kedua menjadi "sesuatu yang lain", dan "nama" di baris ketiga menjadi "sesuatu yang berbeda". Saya tidak bisa mengandalkan urutan ini terjadi dalam file, jadi saya tidak bisa hanya mengganti kemunculan pertama "nama" dengan "sesuatu" dan kemunculan kedua "nama" dengan "sesuatu yang berbeda". Saya benar-benar perlu melakukan pencarian untuk string di sekitarnya untuk memastikan saya menemukan dan mengganti hal yang benar.
Sejauh ini saya telah mencoba perintah ini untuk menemukan dan mengganti nama "nama" pertama:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
Namun itu tidak berfungsi jadi saya pikir beberapa karakter ini mungkin perlu melarikan diri, dll.
Idealnya, saya ingin dapat menggunakan regex untuk mencocokkan hanya dua kejadian "nama pengguna" dan hanya mengganti "nama". Sesuatu seperti ini tetapi dengan sed
:
<username>.+?(name).+?</username>
dan ganti konten di dalam tanda kurung dengan "sesuatu".
Apakah ini mungkin?