使用 grep 解析日志的 unix shell 脚本
events
的内容:
<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>
我想提取所有带有
的
条目的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 行不会每次都起作用,中间可能有更多标签,因此需要一些解析逻辑来找出从 到
的文本;
。
我真的很感激一些关于为此制定脚本的帮助。
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您是否考虑过使用
xml
grep 工具,例如 xml starlet 来从中挑选出片段这些日志文件?会干净很多。Have you considered using a
xml
grepping tool like xml starlet to pick out the pieces from these log files? It would be much more cleaner.使用 shell 脚本执行此操作并不是真正适合该工作的工具。你确实需要一个解析器。这是 python 中的单个文件。您可以围绕此进行循环并执行整个日志文件目录。
Doing this with a shell script is not really the right tool for the job. You really need a parser. Here's one in python for a single file. You could throw a loop around this and do an entire directory of log files.
您可能想
也可能不想抑制“time”行中的“
”。prints
You may or may not want to suppress that "
<log>
" in the "time" line.对于其他仍在寻找 shell 脚本以在本地或远程查找日志文件中的特定字符串的人,我编写了以下 shell 脚本:
https://github.com/ijimako/logs_extractor
干杯,
For others still looking for a shell script to find specific string(s) in log(s) file(s) locally or remotely I have written this shell script:
https://github.com/ijimako/logs_extractor
Cheers,