Как частично заменить текст в linux с помощью sed - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть тег XML, которым нужно манипулировать на Linux:

<m1:PayloadId>TESTCASE01_0000123456</m1:PayloadId>

Мне нужно изменить текст с TESTCASE01_0000123456 на TESTCASE01_1234567890 между тегами.

Я использовал эту команду sed в своем коде:

sed -i 's/PayloadId>.*</m1:PayloadId>'0000123456'</g' t1.xml

, но она заменяет весь текст. Мне нужно сохранить TESTCASE01_.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Это может сработать для вас (GNU sed):

sed 's/\(<m1:PayloadId>[^>_]*_\)[^<]*/\11234567890/' file

Совпадение по открывающему тегу и последующему значению, сохранение тега и его значения до и включение первого _ в обратную ссылку \1. Затем замените совпадение на обратную ссылку и требуемый суффикс цифры c.

0 голосов
/ 13 февраля 2020

Вы можете попробовать это:

sed  's|\(<m1:PayloadId>TESTCASE01\)_0000123456\(</m1:PayloadId>\)|\1_1234567890\2|g' t1.xml
...