Contenu de events<xyz>.log
:script shell unix pour analyser les journaux en utilisant grep
<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>
Je veux extraire les balises Entrée1 et inscription2 de toutes <log>
entrées avec <id>
« john » dans un fichier. Je veux le faire dans un script shell qui regarderait tous les fichiers * .log dans un répertoire. La sortie devrait être similaire à ce qui suit.
Contenu de a.out:
<time>09:00:30</time>
<entry1>abcd</entry1>
<entry2>abcd</entry2>
<time>09:00:40</time>
<entry1>abcd</entry1>
<entry2>abcd</entry2>
Je suis nouveau shell script, mais j'ai essayé avec quelques commandes de base à au moins regarder les journaux:
$ grep -B 3 -in '<id>john</id>' * > /tmp/a.out
commande ci-dessus me donne sortie avec 3 lignes au-dessus de l'étiquette d'identification pour john comme suit
...
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>
Ceci est bien, mais le problème est que -3 lignes ne fonctionnera pas à chaque fois, il pourrait y avoir plus de balises entre les deux, donc il y a une logique d'analyse nécessaire pour trouver le texte de <time>
à </id>
.
J'apprécierais vraiment de vous aider à formuler un script pour cela.
Merci!
wow! xml starlet est un excellent outil! J'essaie d'utiliser le xml sel {} [ ...] et l'option -i pour les conditions –
Omkar
Cela fait longtemps que je ne l'ai pas utilisé mais je me souviens d'avoir été frustré avec le jury truqué scripts awk/sed/shell. xml starlet était un * grand * soulagement. –