Назад | Перейти на главную страницу

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

Как я могу это сделать?

Спасибо,

Вы должны изменить команду

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

Получится любой узор с пространство + имя пользователя + двойная цитата до следующего двойная цитата и измените первую часть и новое значение.