How to grep 2 or 3 lines, one containing the text I want, and the others just below it?
By Jessica Wood •
This is a snapshot of error log:
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)I do the following command:
cat foo.log | grep ERROR to get an OP as:
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
What command should I execute to get the output as
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channelie, also grep the line(s) after the pattern?
14 Answers
Just do a:
grep -A1 ERRORThe -A1 tells grep to include 1 line after the match. -B includes lines before the match, in case you need that too.
For a more portable way, there's awk
awk '/ERROR/{n=NR+1} n>=NR' foo.logOr maybe you want all the indented lines following?
awk '/^[^[:blank:]]/{p=0} /ERROR/{p=1} p' foo.log 3 I have found this solution:
cat apache.error.log | grep -Pzo '^.*?Exception In get Message.*?\ncom\.rabbitmq.*?(\n(?=\s).*?)*$'Where (\n(?=\s).*?)* means:
\nfind next line(?=\s)where is starts from whitespace character.*?until end of line(...)*Find such lines multiple times
PS. You may turf this pattern \ncom\.rabbitmq.*? if second line begins from whitespace \s
For this simple task a simple way is:
grep -A num
Print num lines of trailing context after each match. See also the -B and -C options.
grep -B num
Print num lines of leading context before each match. See also the -A and -C options.
grep -C num
Print num lines of leading and trailing context surrounding each match.
The default is 2 and is equivalent to -A 2 -B 2. Note: no whitespace may be given between the option and its argument.
More in general
"Zoraya ter Beek, age 29, just died by assisted suicide in the Netherlands. She was physically healthy, but psychologically depressed. It's an abomination that an entire society would actively facilitate, even encourage, someone ending their own life because they had no hope. Th…"