Voici un instantané du journal des erreurs:
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channel
at com.rabbitmq.client.impl.AMQChannel.ensureIsOpen(AMQChannel.java:195)
at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:222)
at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:208)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:139)
at com.rabbitmq.client.impl.ChannelN.basicGet(ChannelN.java:645)
Je fais la commande suivante:
cat foo.log | grep ERROR
pour obtenir un OP comme:
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
Quelle commande dois-je exécuter pour obtenir la sortie en tant que
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channel
c'est-à-dire, également grep la ligne (s) après le motif?
bash
command-line
grep
theTuxRacer
la source
la source
com.rabbitmq.client
texte de la ligne suivante commence-t-il depuis le début ou contient-il des espaces devant lui?Réponses:
Faites juste un:
Le
-A1
dit à grep d'inclure 1 ligne après le match.-B
inclut des lignes avant le match, au cas où vous en auriez besoin.la source
-C
comprend des lignes avant et après le match (le «C» signifie «contexte», je crois).Pour un moyen plus portable, il y a awk
Ou peut-être voulez-vous que toutes les lignes en retrait suivent?
la source
awk
commandes fonctionnent.J'ai trouvé cette solution:
Où
(\n(?=\s).*?)*
signifie:\n
trouver la ligne suivante(?=\s)
où est le caractère blanc.*?
jusqu'à la fin de la ligne(...)*
Trouver de telles lignes plusieurs foisPS Vous pouvez appliquer ce motif
\ncom\.rabbitmq.*?
si la deuxième ligne commence à partir d'un espace\s
la source