2012-10-05 26 views
5

मुझे यूनिक्स के साथ मदद की ज़रूरत है। मैं यह देखने की कोशिश कर रहा हूं कि दो कथन (printf और fprintf) में से एक फ़ाइल में है या नहीं। मैंने आदेश का उपयोग किया:Grep या ऑपरेटर काम नहीं कर रहा

search=`cat $file | grep -w "fprintf\|printf"` 

किसी कारण से, यह उन फ़ाइलों में नहीं मिलता है जहां उनमें से एक मौजूद है। क्यूं कर?

+0

आप शब्द regexp झंडा, क्यों छोड़ नहीं है '-w'? – Steve

+2

[यूयूओसी] (http://catb.org/jargon/html/U/UUOC.html) - कृपया ध्यान दें कि आपको 'search = $ (grep -w -E -e" f? Printf "$ फ़ाइल का उपयोग करना चाहिए) 'या 'बिल्ली' और एक पाइप के साथ समय बर्बाद करने के बजाय कुछ समान है। –

उत्तर

7

आपके पास दो समस्याएं हैं।

पहला, standard grep| ऑपरेटर का समर्थन नहीं करता है। आपको egrep या -E ध्वज का उपयोग करने की आवश्यकता है।

दूसरा, डबल-कोट्स के अंदर, \| का अर्थ \| है। बैकस्लैश grep कमांड के माध्यम से पारित हो जाता है, इसलिए grep| ऑपरेटर समझा गया, बैकस्लैश इसे सामान्य वर्ण में बदल देगा।

इस प्रयास करें:

search=`cat $file | egrep -w "fprintf|printf"` 

या आप grep के लिए एक अलग तर्क के रूप में प्रत्येक विकल्प प्रदान कर सकते हैं:

search=`cat $file | grep -w -e fprintf -e printf 
+2

जीएनयू grep इसे ठीक से समर्थन करता है। – paxdiablo

+0

धन्यवाद! मैं अभी भी यूनिक्स के लिए वास्तव में नया हूँ। –

+0

यदि वह जीएनयू grep का उपयोग कर रहे थे, तो उसका आदेश मेल खाता होगा। मानक 'grep' '' | 'जिस तरह से' egrep' व्यवहार '|' 'का इलाज नहीं करता है। –

0
grep -w "fprintf\|printf" $file 

यह मेरे खोल में ठीक काम करता है। फिर भी, यहां कुछ विकल्प दिए गए हैं:

egrep -w 'fprintf|printf' $file 
grep -wE 'fprintf|printf' $file 
grep -we 'fprintf\|printf' $file