2009-07-13 12 views
5

यह प्रश्न this answer पर आधारित है।Grep के विकल्प के व्यावहारिक उपयोग को समझने के लिए- विभिन्न स्थितियों में एच

आप दोनों आदेशों से एक ही आउटपुट क्यों प्राप्त करते हैं?

कमान एक

$sudo grep muel *                /tmp 
masi:muel 

कमान बी

$sudo grep -H muel *               /tmp 
masi:muel 

रोब की टिप्पणी से पता चलता है कि मुझे कमान एक मुझे masi:, लेकिन केवल muel नहीं देना चाहिए।

संक्षेप में, -H का व्यावहारिक उद्देश्य क्या है?

+1

क्या आप हर * nix कमांड लाइन उपयोगिता के प्रत्येक विकल्प के माध्यम से जाने जा रहे हैं? बस सोच रहा है ... –

+2

यह "क्या करता है" के स्तर पर QUITE नहीं है, और अधिक "आप किस स्थिति में इसका उपयोग कर सकते हैं"। स्वीकार्य रूप से एक महान प्रश्न शीर्षक नहीं है। –

+1

@ बॉबी जैक हालांकि, http://stackoverflow.com/users/54964 देखें?टैब = हालिया # सॉर्ट-टॉप –

उत्तर

12

यदि एक से अधिक फ़ाइल नाम दिए गए हैं तो Grep डिफ़ॉल्ट रूप से फ़ाइल नाम सूचीबद्ध करेगा। -H विकल्प ऐसा करता है कि भले ही केवल एक फ़ाइल नाम दिया गया हो। आपके दोनों उदाहरणों में, एक से अधिक फ़ाइल नाम दिए गए हैं।

यहाँ एक बेहतर उदाहरण है:

$ grep Richie notes.txt 
Richie wears glasses. 

$ grep -H Richie notes.txt 
notes.txt:Richie wears glasses. 

यह अधिक उपयोगी है जब आप यह फ़ाइलों की संख्या अज्ञात के लिए वाइल्डकार्ड दे रहे हैं, और आप हमेशा फ़ाइल नाम मुद्रित चाहते हैं, भले ही वाइल्डकार्ड केवल एक फ़ाइल से मेल खाता है।

$ grep muel mesi 
muel 

$ grep -H muel mesi 
masi:muel 

यह विभिन्न पटकथा संदर्भों में महत्वपूर्ण हो सकता है:

+0

@ रिची: बॉबी का जवाब उत्कृष्ट है। मैं विकल्प के व्यावहारिक प्रभाव के बारे में पहले नहीं जानता था। –

5

आप एक एकल फाइल grep हैं, एच कुछ फ़र्क पड़ता है। उदाहरण के लिए, एक स्क्रिप्ट (या कमांड की गैर-तुच्छ पाइप वाली श्रृंखला) इस बात से अवगत नहीं हो सकती है कि यह वास्तव में कितनी फाइलों से निपट रही है: एक, या कई।

+0

क्या आप एक उदाहरण दे सकते हैं जहां विकल्प '-H'' का उपयोग करना उपयोगी है। मुझे पहले कभी इसकी आवश्यकता नहीं है। –

+1

यदि आप पाइप करते हैं, तो grep मानक इनपुट से पढ़ा जाएगा। इसका मतलब है कि कोई फ़ाइल नाम नहीं है। – Zr40

+1

हम्म .. मेरे सिर के ऊपर से मुश्किल। मैं एक स्क्रिप्ट की कल्पना कर सकता हूं जो निर्देशिकाओं के समूह के माध्यम से 'चलता है', कटौती करने के लिए 'grep' के परिणामों को पारित करने वाले प्रत्येक शब्द से फ़ाइल नाम एकत्रित करता है। -एच फाइलनामों की गारंटी देगा, भले ही केवल एक ही फाइल को पहली जगह में खोजा गया हो। यह एक महान उदाहरण नहीं है, लेकिन यह एक विशिष्ट है क्योंकि मैं छोटी सूचना पर हो सकता हूं! :) –

1

जब आप एकाधिक फ़ाइलों से grep करते हैं, डिफ़ॉल्ट रूप से यह उस फ़ाइल का नाम दिखाता है जहां मिलान मिला था। यदि आप -H निर्दिष्ट करते हैं, तो फ़ाइल नाम हमेशा दिखाया जाएगा, भले ही आप एक फ़ाइल से grep। आप फ़ाइल नाम कभी दिखाने के लिए निर्दिष्ट नहीं कर सकते हैं।

1

Emacs में grep इंटरफेस (एम-एक्स grep, एम-एक्स lgrep, एम-एक्स rgrep) है। यदि आप Emacs को वर्तमान निर्देशिका में foo की खोज करने के लिए कहते हैं, तो Emacs grep को कॉल करता है और grep आउटपुट को संसाधित करता है और फिर आपको क्लिक करने योग्य लिंक के साथ परिणाम प्रस्तुत करता है। Google की तरह क्लिक करने योग्य लिंक।

क्या Emacs करता है कि यह grep के लिए दो विकल्प पास करता है: -n (लाइन संख्या दिखाएं) और -H (फ़ाइल फ़ाइल दिखाएं, भले ही केवल एक फ़ाइल। बिंदु स्थिरता है) और फिर आउटपुट को क्लिक करने योग्य लिंक में बदल दें।

सामान्य रूप से, एक अच्छा एपीआई होने के लिए स्थिरता अच्छी है, लेकिन डीडब्ल्यूआईएम के साथ स्थिरता संघर्ष।

जब आप सीधे grep का उपयोग करते हैं, तो आप डीडब्ल्यूआईएम चाहते हैं, तो आप -एच पास नहीं करते हैं।

संबंधित मुद्दे