我有一个包含以下内容的文件:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
并且我需要制作一个脚本,将第一行中的“名称”更改为“ something”,第二行中的“密码”更改为“ somethingelse”,第三行中的“ name”更改为“ somethingdifferent”。我不能依靠它们在文件中出现的顺序,因此我不能简单地将“名称”的第一次出现替换为“某物”,并将第二次出现的“名称”替换为“某物”。我实际上需要搜索周围的字符串,以确保找到并替换了正确的东西。
到目前为止,我已经尝试过以下命令来查找和替换第一个“名称”出现的位置:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
但是它不起作用,所以我认为其中某些字符可能需要转义,等等。
理想情况下,我希望能够使用正则表达式来匹配两个“用户名”的出现并仅替换“名称”。像这样的东西,但是sed
:
<username>.+?(name).+?</username>
并用“ something”代替括号中的内容。
这可能吗?