events<xyz>.log
的内容:使用grep解析日志的unix shell脚本
<log>
<time>09:00:30</time>
<entry1>abcd</entry1>
<entry2>abcd</entry2>
<id>john</id>
</log>
<log>
<time>09:00:35</time>
<entry1>abcd</entry1>
<entry2>abcd</entry2>
<id>steve</id>
</log>
<log>
<time>09:00:40</time>
<entry1>abcd</entry1>
<entry2>abcd</entry2>
<id>john</id>
</log>
我想用<id>
'john'将所有<log>
条目的entry1和entry2标签提取到一个文件中。我想在shell脚本中执行此操作,该脚本将查看目录中的所有* .log文件。输出应类似于以下内容。
a.out的内容:
<time>09:00:30</time>
<entry1>abcd</entry1>
<entry2>abcd</entry2>
<time>09:00:40</time>
<entry1>abcd</entry1>
<entry2>abcd</entry2>
我是shell脚本的新手,但是我尝试了一些基本的命令,至少要查看日志:
$ grep -B 3 -in '<id>john</id>' * > /tmp/a.out
上面的命令给了我john的id标签以上3行输出如下
...
events111.log-100- <time>09:00:40</time>
events111.log-101- <entry1>abcd</entry1>
events111.log-102- <entry2>abcd</entry2>
events111.log-103- <id>john</id>
....
events112.log-200- <time>06:56:03</time>
events112.log-201- <entry1>abcd</entry1>
events112.log-202- <entry2>abcd</entry2>
events112.log-203- <id>john</id>
这很好,但问题是-3行每次都不能工作,中间可能会有更多的标签,所以需要一些解析逻辑找出从<time>
到</id>
的文本。
我非常感谢为此制定脚本的一些帮助。
谢谢!
哇! xml starlet是一个伟大的工具!我正在尝试使用xml sel <全球选项> {} [ ...] 和条件的-i选项 –
Omkar
2010-11-16 10:48:31
我已经使用它很长一段时间了,但是我记得因为操纵了陪审团而感到沮丧awk/sed/shell脚本。 xml starlet是一个*大*救济。 – 2010-11-16 13:43:08