Este é um instantâneo do log de erros:
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)
Eu faço o seguinte comando:
cat foo.log | grep ERROR
para obter um OP como:
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
Qual comando devo executar para obter a saída como
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channel
ou seja, também grep a (s) linha (s) após o padrão?
bash
command-line
grep
theTuxRacer
fonte
fonte
com.rabbitmq.client
texto na próxima linha começa no início ou tem alguns espaços à sua frente?Respostas:
Basta fazer um:
O
-A1
comando grep deve incluir 1 linha após a partida.-B
inclui linhas antes da partida, caso você precise disso também.fonte
-C
inclui linhas antes e depois da partida (o 'C' significa 'contexto', acredito).Para uma maneira mais portátil, há awk
Ou talvez você queira todas as linhas recuadas a seguir?
fonte
awk
comandos funcionam.Eu encontrei esta solução:
Onde
(\n(?=\s).*?)*
significa:\n
encontre a próxima linha(?=\s)
onde é iniciado a partir do caractere de espaço em branco.*?
até o final da linha(...)*
Encontre essas linhas várias vezesPS. Você pode definir esse padrão
\ncom\.rabbitmq.*?
se a segunda linha começar do espaço em branco\s
fonte