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