2 या 3 लाइनों को कैसे grep करें, एक मुझे जो पाठ चाहिए, और अन्य जो इसके ठीक नीचे हैं?


32

यह त्रुटि लॉग का एक स्नैपशॉट है:

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

यानी, पैटर्न के बाद लाइन (एस) भी grep?


क्या com.rabbitmq.clientअगली पंक्ति पर पाठ शुरू हो रहा है या उसके सामने कुछ रिक्त स्थान है?
यूजेन कोनकोव

जवाबों:


62

बस एक करें:

grep -A1 ERROR

-A1ग्रेप बताता मैच के बाद 1 पंक्ति शामिल करने के लिए। -Bमैच से पहले की लाइनें भी शामिल हैं, अगर आपको भी इसकी आवश्यकता है।


ओह ठीक है, यह भी उपयोगी होगा।
TheTuxRacer

12
और -Cमैच के पहले और बाद में दोनों लाइनें शामिल हैं ('सी' का अर्थ 'संदर्भ' है, मुझे विश्वास है)।
मारियस गेदमिनस

5

अधिक पोर्टेबल तरीके के लिए, वहाँ awk है

awk '/ERROR/{n=NR+1} n>=NR' foo.log

या हो सकता है कि आप सभी इंडेंटेड लाइनों का पालन करना चाहते हैं?

awk '/^[^[:blank:]]/{p=0} /ERROR/{p=1} p' foo.log

2
: हे कि अच्छी जानकारी है, बल्कि ओवरकिल! फिर भी, एक अलग विधि जानने के लिए इसका अच्छा :)
theTuxRacer

काश मैं समझ पाता कि वो awkकमांड कैसे काम करते हैं।
फायरफाइटर

3
@Firefeather awk.freeshell.org , awk सीखने का एक अच्छा संसाधन है। GNU awk मैनुअल पेज बहुत अच्छा है।
जिरिहा

1

मुझे इसका हल मिल गया है:

cat apache.error.log | grep -Pzo '^.*?Exception In get Message.*?\ncom\.rabbitmq.*?(\n(?=\s).*?)*$'

जहां का (\n(?=\s).*?)*अर्थ है:

  • \n अगली पंक्ति खोजें
  • (?=\s) व्हॉट्सएप चरित्र से शुरू होता है
  • .*? लाइन के अंत तक
  • (...)* कई बार ऐसी लाइनें लगाएं

पुनश्च। \ncom\.rabbitmq.*?अगर दूसरी लाइन व्हॉट्सएप से शुरू होती है तो आप इस पैटर्न को टर्फ कर सकते हैं\s

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.