কীভাবে 2 বা 3 লাইন গ্রেপ করবেন, একটিটি আমি চাই এটির টেক্সট এবং অন্যটি ঠিক এর নীচে?


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

অর্থাত, প্যাটার্নটির পরে লাইনটিও গ্রেপ করুন?


com.rabbitmq.clientপরের লাইনের পাঠ্যটি কি শুরু করা থেকে শুরু হয় বা এর সামনে কিছু স্পেস রয়েছে?
ইউজেন কনকভ

উত্তর:


62

শুধু একটি করুন:

grep -A1 ERROR

-A1, Grep বলে খেলা শেষে 1 টি লাইন অন্তর্ভুক্ত করা। -Bম্যাচের আগে লাইনগুলি অন্তর্ভুক্ত করে, যদি আপনার এটিরও প্রয়োজন হয়।


ওহ ঠিক আছে, এটি খুব সহায়ক হবে।
TheTuxRacer

12
এবং -Cম্যাচের আগে এবং পরে উভয়ই লাইন অন্তর্ভুক্ত করে ('সি' 'কনটেক্সট' বোঝায়, আমি বিশ্বাস করি)।
মারিয়াস গেডমিনাস

5

আরও বহনযোগ্য উপায়ের জন্য, এখানে দুর্দান্ত রয়েছে

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

অথবা আপনি সমস্ত ইন্ডেন্টেড লাইনগুলি অনুসরণ করতে চান?

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

2
: ও যে ভাল তথ্য, বরং ওভারকিল! তবুও, একটি ভিন্ন পদ্ধতিটি জানা ভাল: :)
TheTuxRacer

আমি আশা করি আমি বুঝতে পারি কীভাবে এই awkআদেশগুলি কাজ করে।
ফায়ারফ্যাথার

3
@ ফায়ারফিডার awk.freehell.org অ্যাজক শেখার জন্য একটি ভাল উত্স। জিএনইউ অ্যাজক ম্যানুয়াল পৃষ্ঠাটিও বেশ ভাল।
গিরিহা

1

আমি এই সমাধানটি খুঁজে পেয়েছি:

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

যেখানে (\n(?=\s).*?)*অর্থ:

  • \n পরবর্তী লাইন সন্ধান করুন
  • (?=\s) যেখানে সাদা স্থান থেকে শুরু হয়
  • .*? লাইনের শেষ অবধি
  • (...)* এ জাতীয় লাইন একাধিকবার সন্ধান করুন

গীত। \ncom\.rabbitmq.*?দ্বিতীয় পংক্তি সাদা জায়গা থেকে শুরু হয়ে গেলে আপনি এই প্যাটার্নটিকে ঘায়েল করতে পারেন\s

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.