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

Awk 如何使用sed在linux中部分替换文本,awk,sed,xmlstarlet,Awk,Sed,Xmlstarlet,我有一个需要在Linux上操作的XML标记: <m1:PayloadId>TESTCASE01_0000123456</m1:PayloadId> 但它取代了整个文本。我需要保留TESTCASE01您可以尝试以下方法: sed 's|\(<m1:PayloadId>TESTCASE01\)_0000123456\(</m1:PayloadId>\)|\1_1234567890\2|g' t1.xml sed的|\(TESTCASE01\)\u

我有一个需要在Linux上操作的XML标记:

<m1:PayloadId>TESTCASE01_0000123456</m1:PayloadId>
但它取代了整个文本。我需要保留
TESTCASE01

您可以尝试以下方法:

sed  's|\(<m1:PayloadId>TESTCASE01\)_0000123456\(</m1:PayloadId>\)|\1_1234567890\2|g' t1.xml
sed的|\(TESTCASE01\)\u 0000123456\(\)\1\u 1234567890\2|g't1.xml
这可能适合您(GNU-sed):


sed的/\([^>\]*\[^总是建议使用懂得xml解析的工具解析xml,比如xmlstarlet。
sed  's|\(<m1:PayloadId>TESTCASE01\)_0000123456\(</m1:PayloadId>\)|\1_1234567890\2|g' t1.xml
sed 's/\(<m1:PayloadId>[^>_]*_\)[^<]*/\11234567890/' file