使用sed修改xml文件

use*_*593 2 xml sed

我需要在 xml 文件中搜索位于开始/结束标记中的一些文本,如果找到,则在结束标记之前写一行文本。

例如,在XML 文件中,我需要在MyTag中搜索“MyText1”。如果找到,请在结束标记之前添加FoundIt,如下所示

 <MyTag>
 <Tag1>MyText1</Tag1>
 <Tag2>MyText2</Tag2>
 <Tag3>MyText3</Tag3>
 <Tag4>MyText4</Tag4>
 <FoundTag1>FoundIt</FoundTag1>
 </MyTag>
Run Code Online (Sandbox Code Playgroud)

我能够使用 sed 搜索范围并打印 MyText1。但我真正想要做的是在结束标签之前添加“FoundIt”标签。

脚本

/<MyTag>/,/<\/MyTag>/{
/<Tag1>MyText1</Tag1>/p
}
Run Code Online (Sandbox Code Playgroud)

XML 文件内容

<XmlFile>

<BeginTag>
<SomeTag>Text</SomeTag>
</BegingTag>

<MyTag>
<Tag1>MyText1</Tag1>
<Tag2>MyText2</Tag2>
<Tag3>MyText3</Tag3>
<Tag4>MyText4</Tag4>
</MyTag>

<EndTag>
<SomeTag>Text</SomeTag>
</EndTag>

</XmlFile>
Run Code Online (Sandbox Code Playgroud)

pot*_*ong 5

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

sed '/<MyTag>/!b;:a;/<\/MyTag>/!{$!{N;ba}};/MyText1/s/.*\n/&<FoundTag1>FoundIt<\/FoundTag1>\n/' xml_file
Run Code Online (Sandbox Code Playgroud)

寻找包含<MyTag>if not pay out 的行。找到后,收集行直到该行</MyTag>出现,然后检查这些行是否包含MyText1,如果包含,则<FoundTag1>FoundIt</FoundTag1>在收集的最后一行之前替换 后跟一个新行。

  • @TeaBee 尝试 `/^\s*&lt;MyTag&gt;\s*$/` 这迎合了标签两侧的空白' (2认同)