Содержимое events<xyz>.log
:
<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 из всех записей <log>
с <id>
'john' в файл. Я хочу сделать это в сценарии оболочки, который будет смотреть все файлы * .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>
Я новичок в написании сценариев оболочки, однако я попытался с помощью некоторых основных команд хотя бы посмотреть журналы:
$ grep -B 3 -in '<id>john</id>' * > /tmp/a.out
Команда
выше дает мне вывод с тремя строками над тегом id для john следующим образом
...
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>
. * Требуется некоторая логика анализа 1020 *
Я был бы очень признателен за помощь в составлении сценария для этого.
Спасибо!