我正在尝试替换文件中引号内的字符串!以下是示例:
<?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
它将获得任何具有空间+用户名+双引号直到下一个双引号并改变第一部分和新值。