Я пытаюсь заменить строку в кавычках в файле! Вот пример:
<?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
Как я могу это сделать?
Спасибо,
Вы должны изменить команду
sed 's/\(.*username=\)[^ ]*\( .*\)/\1"NEW_VALUE"\2/' ROOT.xml
в
sed 's/\(.*username=\)[^ \/]*\( .*\)/\1"NEW_VALUE"\2/' ROOT.xml
так как [^ ]
означает: каждый символ, кроме blank
. [^ \/]
означает: каждый символ, кроме blank
и / или /
.
Измените на это:
sed 's/\( username="\)[^"]*/\1NEW_VALUE/' ROOT.xml
Получится любой узор с пространство + имя пользователя + двойная цитата до следующего двойная цитата и измените первую часть и новое значение.