डिफ़ॉल्ट रूप से, अधिकांश खोज उपकरण फ़ाइल नामों को देखते हैं, फ़ाइल सामग्री को नहीं। हालांकि, सबसे प्रसिद्ध GNU खोज कार्यक्रम, grep
, सही झंडे वाली फाइलों के अंदर दिखेगा। यहां हम आपको दिखाएंगे कि आप Linux पर किसी फ़ाइल में विशिष्ट शब्द (शब्दों) को कैसे ढूंढ सकते हैं।
फ़ाइल में विशिष्ट शब्द खोजने के लिए grep का उपयोग करना
डिफ़ॉल्ट रूप से, grep फ़ाइलों की सामग्री के साथ-साथ उनके फ़ाइल नामों के माध्यम से खोज करता है। यह अधिकांश लिनक्स सिस्टम में शामिल है और आम तौर पर डिस्ट्रोस में समान है। उस ने कहा, छोटे या कम शक्तिशाली लिनक्स बॉक्स एक अलग कमांड चलाना पसंद कर सकते हैं, जैसे ack
।
फ़ाइल को एन्कोड करने के तरीके के आधार पर, grep हमेशा अंदर देखने में सक्षम नहीं हो सकता है। लेकिन अधिकांश टेक्स्ट-आधारित प्रारूपों के लिए, grep निर्दिष्ट पैटर्न के लिए फ़ाइल के टेक्स्ट को स्कैन कर सकता है।
grep -Rw '/path/to/search/' -e 'pattern'
-R
ध्वज निर्दिष्ट निर्देशिका में निहित सभी निर्देशिकाओं के माध्यम से नेविगेट करते हुए, पुनरावर्ती मोड में grep सेट करता है। -w
ध्वज पूरे शब्द मिलान के लिए खोज करता है। इसका मतलब यह है कि 'लाल' केवल 'लाल' से मेल खाएगा, जो व्हाइटस्पेस वर्णों से घिरा हुआ है और 'अनावश्यक' या 'थका हुआ' नहीं है। -e
ध्वज खोज करने के लिए पैटर्न का प्रस्ताव करता है। यह डिफ़ॉल्ट रूप से रेगुलर एक्सप्रेशन का समर्थन करता है।
grep को गति देने के लिए, आप --exclude
. का उपयोग कर सकते हैं और --include
खोज को कुछ प्रकार की फाइलों तक सीमित करने के लिए झंडे। उदाहरण के लिए, --exclude=*.csv
.csv एक्सटेंशन वाली किसी भी फाइल में खोज नहीं करेगा। --include=*.txt
दूसरी ओर, केवल .txt एक्सटेंशन वाली फ़ाइलों में ही खोज करेगा। ध्वज को grep कमांड के तुरंत बाद जोड़ा जा सकता है, जैसा कि नीचे दिखाया गया है:
grep --exclude=*.csv -Rw '/path/to/search' -e 'pattern'
आप नीचे दिए गए प्रारूप का पालन करके निर्दिष्ट निर्देशिकाओं को भी बाहर कर सकते हैं:
grep --exclude-dir={dir1,dir2,*_old} -Rw '/path/to/search' -e 'pattern'
यह आदेश dir1, dir2 नाम की वर्तमान कार्यशील निर्देशिका में किसी निर्देशिका में खोज नहीं करेगा, या पैटर्न *_old से मेल खाते हुए, उन्हें खोज प्रक्रिया से हटा देगा। यह वर्तमान कार्यशील निर्देशिका में अन्य सभी फाइलों पर निर्दिष्ट पुनरावर्ती, पूर्ण-शब्द मिलान खोज को निष्पादित करेगा।
फ़ाइल में विशिष्ट शब्द ढूँढ़ने के लिए खोज का उपयोग करना
जबकि find
कमांड का सिंटैक्स grep की तुलना में अधिक जटिल है, कुछ इसे पसंद करते हैं।
find . -name "*.php" -exec grep "pattern" {} \;
यह कमांड फाइंड के -exec
. का उपयोग करेगा खोज के लिए मिली फ़ाइलों को grep में पास करने के लिए ध्वज। सिंटैक्स की एक चतुर व्यवस्था के साथ, आप उन विशिष्ट फ़ाइल प्रकारों का पता लगाने के लिए खोज की तेज़ फ़ाइल-सिस्टम खोज का उपयोग कर सकते हैं जिन्हें आप खोजना चाहते हैं, फिर फ़ाइलों के अंदर खोजने के लिए उन्हें grep पर पाइप करें।
ध्यान दें कि खोज केवल फ़ाइल नामों को देखता है, सामग्री को नहीं। इसलिए फ़ाइल टेक्स्ट और सामग्री को खोजने के लिए grep की आवश्यकता होती है। सामान्य grep झंडे -exec
. के भीतर से पूरी तरह से चालू होने चाहिए झंडा।
एक फ़ाइल में विशिष्ट शब्द ढूँढ़ने के लिए ack का उपयोग करना
एके कमांड संभवतः सबसे तेज़ खोज उपकरण है, लेकिन यह उपरोक्त विकल्पों की तरह लोकप्रिय नहीं है। नीचे दिया गया आदेश वर्तमान निर्देशिका में खोज करेगा।
ack 'pattern'
यदि आप किसी विशिष्ट फ़ाइल या निर्देशिका में खोजना चाहते हैं, तो आप उस फ़ाइल या पूर्ण-योग्य पथनाम को अपनी खोज में जोड़ सकते हैं।
ack 'pattern' /path/to/file.txt
निष्कर्ष
अधिकांश स्थितियों में अधिकांश लोगों के लिए, grep व्यापक रूप से उपलब्ध सर्वोत्तम खोज उपकरण है। आप तेजी से खोज विकल्पों के लिए रिपग्रेप जैसे अन्य खोज टूल भी देख सकते हैं