【发布时间】:2012-11-15 13:13:22
【问题描述】:
请帮忙! 我花了几个小时寻找我的解决方案,我正在用头撞墙...... 我想要使用 sed 做的只是: 查找包含“Number Deleted”字符串的标签,并将其删除
输入:
<Cell ss:StyleID="s128"/>
<Cell ss:StyleID="s128"/>
</Row>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s81"><Data ss:Type="String">Number Deleted</Data></Cell>
<Cell ss:StyleID="s81"/>
<Cell ss:StyleID="s81"/>
<Cell ss:StyleID="s81"/>
<Cell ss:StyleID="s82"><Data ss:Type="Boolean">0</Data></Cell>
<Cell ss:StyleID="s81"/>
<Cell ss:StyleID="s82"><Data ss:Type="Boolean">0</Data></Cell>
<Cell ss:StyleID="s83"><Data ss:Type="String">-1</Data></Cell>
<Cell ss:StyleID="s81"><Data ss:Type="String">"Deleted:"</Data></Cell>
<Cell ss:StyleID="s81"/>
<Cell ss:StyleID="s81"/>
<Cell ss:StyleID="s81"/>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="String">Number Saved</Data></Cell>
<Cell ss:Index="5"><Data ss:Type="Boolean">0</Data></Cell>
<Cell ss:Index="7"><Data ss:Type="Boolean">0</Data></Cell>
输出:
<Cell ss:StyleID="s128"/>
<Cell ss:StyleID="s128"/>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="String">Number Saved</Data></Cell>
<Cell ss:Index="5"><Data ss:Type="Boolean">0</Data></Cell>
<Cell ss:Index="7"><Data ss:Type="Boolean">0</Data></Cell>
到目前为止,我想通了,如何查看 xml 排除行从“删除编号”到标签末尾,但这不利于 xml 完整性,因为标签未关闭,这就是我所拥有的:
function filter_xml
{
START="<Cell ss:StyleID="s81"><Data ss:Type="String">Number Deleted"
END="<\/Row>"
sed "/$START/,/$END/d" file.xml
}
【问题讨论】:
-
您应该使用 XML 工具进行此类操作。在任何复杂的嵌套中使用 sed 或 grep 都会失败。
-
肯定的是,sed 不适合,但杀了我 :) 它必须是 sed