Sed 替换引号内的字符串

Sed 替换引号内的字符串

我正在尝试替换文件中引号内的字符串!以下是示例:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Manager pathname="" />
<Resource auth="Container" driverClassName="org.postgresql.Driver"   maxActive="20" maxIdle="5" maxWait="10000" name="jdbc/custom" password="CHANGEIT" type="javax.sql.DataSource" url="jdbc:postgresql://10.10.10.10:5432/database" username="MyUser"/>
</Context>

此命令适用于多个“字段”,但由于 / ,它不适用于用户名。

# It's OK
sed 's/\(.*password=\)[^ ]*\( .*\)/\1"NEW_VALUE"\2/' ROOT.xml

# It's NOK
sed 's/\(.*username=\)[^ ]*\( .*\)/\1"NEW_VALUE"\2/' ROOT.xml

请问我该怎么做?

谢谢你,

答案1

你必须改变命令

sed 's/\(.*username=\)[^ ]*\( .*\)/\1"NEW_VALUE"\2/' ROOT.xml

进入

sed 's/\(.*username=\)[^ \/]*\( .*\)/\1"NEW_VALUE"\2/' ROOT.xml

因为 的[^ ]意思是:除了 之外的每个字符blank[^ \/]的意思是:除了blank和/或 之外的每个字符/

答案2

更改为此:

sed 's/\( username="\)[^"]*/\1NEW_VALUE/' ROOT.xml

它将获得任何具有空间+用户名+双引号直到下一个双引号并改变第一部分和新值。

相关内容