To jest migawka dziennika błędów:
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)
Wykonuję następujące polecenie:
cat foo.log | grep ERROR
dostać OP jako:
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
Jakie polecenie powinienem wykonać, aby uzyskać wynik jako
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channel
tzn. czy grepować linie po wzorze?
bash
command-line
grep
theTuxRacer
źródło
źródło
com.rabbitmq.client
tekst w następnym wierszu zaczyna się od początku, czy ma przed sobą jakieś spacje?Odpowiedzi:
Po prostu wykonaj:
-A1
Mówi grep zawierać 1 linię po meczu.-B
zawiera linie przed meczem, na wypadek, gdybyś też tego potrzebował.źródło
-C
obejmuje wiersze zarówno przed meczem, jak i po nim (uważam, że „C” oznacza „kontekst”).Bardziej przenośny sposób to awk
A może chcesz śledzić wszystkie wcięte linie?
źródło
awk
polecenia.Znalazłem to rozwiązanie:
Gdzie
(\n(?=\s).*?)*
oznacza:\n
znajdź następny wiersz(?=\s)
gdzie zaczyna się od znaku spacji.*?
do końca linii(...)*
Znajdź takie linie wiele razyPS. Możesz darniować ten wzór,
\ncom\.rabbitmq.*?
jeśli druga linia zaczyna się od białych znaków\s
źródło