使用sed查找并替换复杂的字符串(最好使用正则表达式)

哈里·肌肉

我有一个包含以下内容的文件:

<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”。

这可能吗?

lgeorget
sed -i -E "s/(<username>.+)name(.+<\/username>)/\1something\2/" file.xml

我想这就是您要寻找的。

解释:

  • 第一部分中的括号定义了可以在第二部分中重用的组(实际上是字符串)
  • \1\2等在第二部分是在第一部分捕获的第i组的引用(编号从1开始)
  • -E启用扩展的正则表达式(需要+和分组)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用正则表达式从复杂字符串中查找子字符串

使用正则表达式替换字符串

使用正则表达式替换字符串

使用正则表达式替换字符串;

使用带有正则表达式的 sed 来替换字符串

使用sed将字符串匹配的正则表达式替换为通配符

如何使用正则表达式查找和替换字符串的开头和结尾

使用正则表达式查找和替换字符串

在C#中使用正则表达式查找和替换子字符串

使用正则表达式查找/替换NSString中的子字符串

使用正则表达式查找并替换字符串中模式的所有实例

使用正则表达式查找/替换 JSON 中的字符串

查找并用复杂的正则表达式替换html文件中的字符串

复杂的使用正则表达式查找和替换

字符串使用正则表达式替换正则表达式字符类

我在查找/替换中使用什么正则表达式来查找声明字符串的所有实例?

使用正则表达式组替换字符串中的子字符串

使用正则表达式将字符串替换为字符串

使用正则表达式搜索,但仅用 sed 替换字符串的一部分

使用sed仅用不同的字符串替换前两个正则表达式捕获

使用 ultraedit 查找并替换 Perl 正则表达式将冒号插入 4 位时间字符串

使用正则表达式查找并替换字符串中的第二个反引号

如何使用Robot Framework编写正则表达式以查找/替换各种日期字符串

Javascript - 如何使用正则表达式处理以下复杂字符串

无法使用 Fare 从复杂的正则表达式生成字符串

使用正则表达式从复杂的字符串中获取项目

在使用正则表达式的字符串替换特定的字符

如何使用Java正则表达式正确替换字符串中的字符?

如何使用正则表达式替换子字符串中的特定字符?