我有一个在Linux上需要处理的XML标记:
<m1:PayloadId>TESTCASE01_0000123456</m1:PayloadId>
我需要在标签之间将文本从TESTCASE01_0000123456
更改为TESTCASE01_1234567890
。
我在代码中使用了这个sed命令:
sed -i 's/PayloadId>.*</m1:PayloadId>'0000123456'</g' t1.xml
但是它将替换整个文本。我需要保留TESTCASE01_
。
您可以尝试以下方法:
sed 's|\(<m1:PayloadId>TESTCASE01\)_0000123456\(</m1:PayloadId>\)|\1_1234567890\2|g' t1.xml
这可能对您有用(GNU sed):
sed 's/\(<m1:PayloadId>[^>_]*_\)[^<]*/\11234567890/' file
与开头的标签及其后面的值匹配,并将标签及其值保存至并包括回溯参考_
中的第一个\1
。然后将匹配项替换为后向引用和所需的数字后缀。