在文件中搜索和替换

时间:2014-08-12 20:01:24

标签: linux shell grep

我有一个包含数千行的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

一旦找到问题,我不知道如何更换文本。

1 个答案:

答案 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