我有一个包含数千行的XML文件,偶尔会遗漏一个结束标记。这是有问题的,因为我有一个python脚本正在接受并将其转换为电子表格,但是当关闭标记丢失时,脚本会中断并发送不完整的数据。
以下是XML的示例:
<notes>
<note>
<note>-Some text
<date>2014-07-30T14:30:18-07:00</date>
</note>
</notes>
有谁能告诉我如何在文件内搜索,找到丢失标签的地方,然后插入?
我一直在尝试使用grep,但我不能让它在多行上找到一组字符串。这就是我一直在尝试的:
grep "'</date>'\n''</note>'\n'</notes>'" somefile.xml
一旦找到问题,我不知道如何更换文本。
答案 0 :(得分:3)
这适用于给定的数据。但是,它并没有试图保持间距。
awk '
/<note>/ { n++ }
/<\/note>/ { n-- }
/<\/notes>/ { for( ; n; n--) print"</note>" }
{ print }
' file
如果它总是内部有时会丢失并且它总是间隔相同,那么你可以像这样保持间距:
awk '
/^ <\/note>/ { endfound=1 }
/^ <\/note>/ && !endfound { print " </note>" }
{ print; endfound=0 }
' file