Это снимок журнала ошибок:
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)
Я делаю следующую команду:
cat foo.log | grep ERROR
чтобы получить ОП как:
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
Какую команду я должен выполнить, чтобы получить вывод как
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channel
т. е. также отображать строки после шаблона?
bash
command-line
grep
theTuxRacer
источник
источник
com.rabbitmq.client
текст на следующей строке начинается с begginning или имеют некоторые пробелы перед ним?Ответы:
Просто сделайте:
Команда
-A1
grep указывает, что после матча должна быть указана 1 строка.-B
включает строки перед матчем, если вам это тоже нужно.источник
-C
включает в себя строки как до, так и после матча («С» означает «контекст», я считаю).Для более портативного способа есть awk
Или, может быть, вы хотите, чтобы все строки с отступами следовали?
источник
awk
работают эти команды.Я нашел это решение:
Где
(\n(?=\s).*?)*
означает:\n
найти следующую строку(?=\s)
где начинается с пробела.*?
до конца строки(...)*
Найти такие строки несколько разPS. Вы можете изменить этот шаблон,
\ncom\.rabbitmq.*?
если вторая строка начинается с пробела\s
источник