2013-02-27 235 views
26

यह मूल है लेकिन मैं इसे Google पर असमर्थ करने में असमर्थ हूं। क्या मैंएक बार में दो अभिव्यक्तियों के लिए grep के साथ खोजें

grep expr1 | grep expr2 

करने के लिए grep के invokation पर उपयोग कर सकते हैं ताकि यह expr1 और expr2 दोनों सहित लाइनों को प्रिंट करता है?

उत्तर

28

आज़माएं:

grep 'expr1.*expr2\|expr2.*expr1'

कि तुलना में यह करता है, तो आप जानते हो "की जरूरत है थोड़ा और अधिक जटिल है expr2 "हमेशा" expr1 "के बाद आ जाएगा। उस मामले में, आप इसे करने के आसान बनाने में कर सकते हैं:

grep 'expr1.*expr2'

+0

बहुत सारे समान प्रश्नों के बजाय - मेरे ऊपर काम करने के अलावा मैंने किया: 'sudo grep -E -rnw'/var/log/'-e' स्मृति से बाहर। * 17 जनवरी | 17 जनवरी * स्मृति से बाहर '' - बैकस्लैश के बिना। लिनक्स मिंट 18.3, जीएनयू बैश 4.3.48 – nate

2

आपको क्या करना चाहिए।

निम्नलिखित एक ही प्रभाव को प्राप्त करने के लिए एक वैकल्पिक तरीका है:

grep -E 'expr1.*expr2|expr2.*expr1' 
+0

मुझे पता है कि यह काम करता है :-)। मैं सिर्फ दो बार grep का आह्वान करने के थक गया था। लेकिन ऐसा लगता है कि इसे लिखने के लिए दो बार grep लिखना जल्दबाजी में है। दुर्भाग्यवश, मुझे अक्सर अभिव्यक्तियों के क्रम को नहीं पता। मैं कुछ 'grep (expr1ANDexpr2) ':-) की उम्मीद कर रहा था। वैसे, क्या यह grep को दो बार कॉल करने से पहले एक क्रिप्ट में भी तेज है? – sup

28

आप कई -e झंडे के साथ के लिए खोज करने के लिए see this post कई तरह से अभिव्यक्त कर सकते हैं।

अर्थात

ग्रेप -e expr1 -e expr2

+7

एचएम, लेकिन यह खोज expr2 या expr2, मैं चाहता हूं और ... – sup

+0

@sup: जीएनयू grep 2.16 में सुझाई गई कमांड लाइन दोनों अभिव्यक्तियों को खोजती है – fred

+0

मैं जीएनयू ग्रुप 2.25 चला रहा हूं और ' grep -version | grep -e is -e सॉफ़्टवेयर 'दोनों एक्सप्रप्रेशंस वाली रेखाओं की खोज नहीं कर रहा है, लेकिन यह या तो एक्सप्रेसन वाली रेखाओं की खोज करता है। – sup

1

वास्तव में अपने खुद के सुझाव लगभग सही आप लाइनों है कि दोनों भाव होते हैं पाने के लिए चाहते हैं। उपयोग करें:

grep expr1 somefile | grep expr2 
+1

ओह, मैं सामान्य रूप से 'बिल्ली somefile | का उपयोग करें grep expr1 | grep expr2', लेकिन मुझे लगता है कि यह महत्वपूर्ण नहीं है कि मैं सामग्री को पाइप करने के लिए किस सॉफ्टवेयर का उपयोग करता हूं :-)। – sup

+0

यह "या" ऑपरेशन के बजाय "और" बना देगा, है ना? –

+0

आप 'grep