У мене є файл із таким вмістом:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
і мені потрібно зробити сценарій, який змінює "ім'я" в першому рядку на "щось", "пароль" у другому рядку на "щосьельси", а "ім'я" в третьому рядку на "щось інше". Я не можу покластися на порядок їх виникнення у файлі, тому я не можу просто замінити перше виникнення "name" на "щось", а друге виникнення "name" на "somethingdifferent". Мені фактично потрібно здійснити пошук навколишніх рядків, щоб переконатися, що я знаходжу та замінюю правильну річ.
Поки я намагався цю команду знайти та замінити перше виникнення "ім'я":
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
однак це не працює, тому я думаю, що деяким із цих персонажів може знадобитися втеча тощо.
В ідеалі, я б хотів, щоб я міг використовувати регулярний вираз, щоб просто збігатися з двома подіями "ім'я користувача" та замінити лише "ім'я". Щось подібне, але з sed
:
<username>.+?(name).+?</username>
і замініть вміст у дужках на "щось".
Чи можливо це?