Grep并输出到两个已知节点之间的文件

时间:2015-01-23 16:35:25

标签: terminal grep tail

我记录了以下信息:

<MessageForTransform>
    <node>
        <taster></taster>
    </node>
</MessageForTransform>

我正在试图找出正则表达式来提取<MessageForTransform>标记之间的所有信息。

使用tail -f观看并输出到文件的奖励积分,我认为格式如下:

$ tail -f logFileToRead.txt >>logFileToWrite.txt | grep "regex"

我使用的是以下正则表达式

\<MessageForTransform\>[^]\<\/MessageForTransform\>

我想提供更多信息,但这实际上是在我不知道正在寻找的正则表达式的情况下我能得到的。如果我将原始XML发布到页面中而不是终端中,则上述工作在正则表达式检查器上。

提前致谢。

1 个答案:

答案 0 :(得分:2)

通常......我们不使用正则表达式来解析XML文件!

但是如果你确定你的xml文件正在使用标准的格式化方式,分隔的行开始和结束你要记录的内容,那么你可能会想:

awk -v delimitertag="MessageForTransform" '
   BEGIN              { weprint=0 ; sd="<"delimitertag">"; ed="</"delimitertag">"}
   ( $0 ~ sd )        { weprint=1;}
   ( weprint == 1 )   { print $0 ;}
   ( $0 ~ ed )        { weprint=0;}
  '   your_file_here  #... or nothing if you want to parse stdin

我的可读性超过简洁性(我相信你会得到比这更好的方法)

很容易修改为不打印起始/结束行。

为了增加一点灵活性,例如:sd="<"delimitertag"[^>]*>";以防这些标签可以包含一些额外的值嵌入