如何使用sed在linux中部分替换文本

问题描述 投票:-2回答:2

我有一个在Linux上需要处理的XML标记:

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

我需要在标签之间将文本从TESTCASE01_0000123456更改为TESTCASE01_1234567890

我在代码中使用了这个sed命令:

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

但是它将替换整个文本。我需要保留TESTCASE01_

awk sed xmlstarlet
2个回答
0
投票

您可以尝试以下方法:

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

0
投票

这可能对您有用(GNU sed):

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

与开头的标签及其后面的值匹配,并将标签及其值保存至并包括回溯参考_中的第一个\1。然后将匹配项替换为后向引用和所需的数字后缀。

© www.soinside.com 2019 - 2024. All rights reserved.