लॉग फ़ाइल से, प्रति पंक्ति कुछ पैटर्न निकालने की कोशिश कर रहा है। मैं पहली बार स्टैम्प और दो या तीन अन्य मैचों को निकालने की कोशिश कर रहा हूं, लेकिन मैं केवल उन लाइनों से मैच प्रिंट करने में सक्षम होना चाहता हूं जहां सभी मैच दिखाई देते हैं। क्या एक एकल grep कमांड है जिसे मैं इसके साथ कर सकता हूं, या क्या मुझे प्रत्येक पंक्ति के माध्यम से लूप करना है?
मेरी लॉग लाइन इस तरह है
2018-08-07 08:55:20 ERROR[t-dispatcher-24] - Error while processing message: code:[RequestTimeout], message:[{"from_addr_type": null, "transport_name": "999_abc_999_2_1", "in_reply_to": null, "group": null, "timestamp": "2018-08-07 07:55:19.795748", "from_addr": "341231231234", "message_type": "user_message", "helper_metadata": {}, "to_addr": "ABCD", "to_addr_type": null, "session_id": "157692", "content": "0013091779", "routing_metadata": {}, "message_version": "20110921", "transport_type": "XXXX", "provider": "abc_somewhere", "transport_metadata": {"abc_somewhere_XXXX": {"clientId": "XXXX157692", "starCode": "999", "session_id": "157692", "phase": "2", "dcs": "15", "requestId": "157692"}}, "session_event": "resume", "message_id": "5d9cab5353ff449783a737e8390a690b"}]
मैं शुरुआत में टाइमस्टैम्प जैसे कुछ समूहों, "सामग्री" और "to_addr" अनुभागों को निकालने में सक्षम होना चाहता हूं।
मैं इसके साथ आया:
grep -oP '(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})|"to_addr":"\K(\d+)|"content":\K"(.+?)"' | tr -d '\n'
लेकिन Im केवल उन पंक्तियों का चयन करने में असमर्थ है जहां तीनों पैटर्न मैच मौजूद हैं। कृपया क्या मैं गलत कर रहा हूँ? क्या मैं बहुत अधिक अपेक्षा कर रहा हूं?