У меня есть файл со следующим содержанием:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
и мне нужно сделать скрипт, который меняет «имя» в первой строке на «что-то», «пароль» во второй строке на «что-то другое», а «имя» в третьей строке на «что-то другое». Я не могу полагаться на порядок их появления в файле, поэтому я не могу просто заменить первое вхождение «name» на «что-то», а второе вхождение «name» на «что-то другое». Мне действительно нужно выполнить поиск окружающих строк, чтобы убедиться, что я нахожу и заменяю правильную вещь.
До сих пор я пробовал эту команду, чтобы найти и заменить первое вхождение «имя»:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
однако это не работает, поэтому я думаю, что некоторым из этих персонажей, возможно, понадобится убежать и т. д.
В идеале я хотел бы использовать регулярные выражения, чтобы просто сопоставить два вхождения "имя пользователя" и заменить только "имя". Как то так, но с sed
:
<username>.+?(name).+?</username>
и заменить содержимое в скобках на «что-то».
Это возможно?