डिफ़ॉल्ट रूप से, अधिकांश खोज टूल फ़ाइल नामों को देखते हैं, फ़ाइल सामग्री को नहीं। हालांकि, सबसे प्रसिद्ध GNU खोज प्रोग्राम, grep, सही फ्लैग्स के साथ फ़ाइलों के अंदर देखेगा। यहां हम आपको दिखाएंगे कि आप लिनक्स पर किसी फ़ाइल में विशिष्ट शब्द(शब्दों) को कैसे ढूंढ सकते हैं।
grep का उपयोग करके किसी फ़ाइल में विशिष्ट शब्द खोजें
डिफ़ॉल्ट रूप से, grep फ़ाइलों की सामग्री के साथ-साथ उनके फ़ाइल नामों के माध्यम से खोज करता है। यह अधिकांश लिनक्स सिस्टम पर शामिल है और आम तौर पर डिस्ट्रोस में समान है। उस ने कहा, छोटे या कम शक्तिशाली लिनक्स बॉक्स एक अलग कमांड चलाना पसंद कर सकते हैं, जैसे ack।
फ़ाइल कैसे एन्कोडेड है, इस पर निर्भर करते हुए, grep हमेशा अंदर देखने में सक्षम नहीं हो सकता है। लेकिन अधिकांश टेक्स्ट-आधारित फॉर्मेट के लिए, grep निर्दिष्ट पैटर्न के लिए फ़ाइल के टेक्स्ट को स्कैन कर सकता है।
grep -Rw '/path/to/search/' -e 'pattern'
-R फ्लैग grep को रिकर्सिव मोड पर सेट करता है, निर्दिष्ट निर्देशिका के भीतर निहित सभी निर्देशिकाओं के माध्यम से नेविगेट करता है। -w फ्लैग पूरे शब्द मिलान के लिए खोज करता है। इसका मतलब है कि 'red' केवल व्हाइटस्पेस कैरेक्टर्स से घिरे 'red' से मेल खाएगा न कि 'redundant' या 'tired' से। -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 का उपयोग करके किसी फ़ाइल में विशिष्ट शब्द खोजें
हालांकि find कमांड का सिंटैक्स grep से अधिक जटिल है, कुछ इसे पसंद करते हैं।
find . -name "*.php" -exec grep "pattern" {} \;
यह कमांड खोजी गई फ़ाइलों को grep में खोज के लिए पास करने के लिए find के -exec फ्लैग का उपयोग करेगा। सिंटैक्स की चतुर व्यवस्था के साथ, आप उन विशिष्ट फ़ाइल प्रकारों का पता लगाने के लिए find के तेज़ फ़ाइल-सिस्टम खोज का उपयोग कर सकते हैं जिन्हें आप खोजना चाहते हैं, फिर उन्हें grep में पाइप करके फ़ाइलों के अंदर खोज सकते हैं।
ध्यान दें कि find केवल फ़ाइल नामों को देखता है, सामग्री को नहीं। इसलिए फ़ाइल टेक्स्ट और सामग्री को खोजने के लिए grep की आवश्यकता होती है। सामान्य grep फ्लैग्स -exec फ्लैग के भीतर पूरी तरह से चालू होने चाहिए।
ack का उपयोग करके किसी फ़ाइल में विशिष्ट शब्द खोजें
ack कमांड संभवतः सबसे तेज़ खोज टूल है, लेकिन यह उपरोक्त विकल्पों जितना लोकप्रिय नहीं है। नीचे दिया गया कमांड वर्तमान निर्देशिका के भीतर खोज करेगा।
ack 'pattern'
यदि आप किसी विशिष्ट फ़ाइल या निर्देशिका के भीतर खोजना चाहते हैं, तो आप उस फ़ाइल या पूर्ण पथनाम को अपनी खोज में जोड़ सकते हैं।
ack 'pattern' /path/to/file.txt
निष्कर्ष
अधिकांश स्थितियों में अधिकांश लोगों के लिए, grep सबसे अच्छा व्यापक रूप से उपलब्ध खोज टूल है। आप तेज़ खोज विकल्पों के लिए RipGrep जैसे अन्य खोज टूल भी देख सकते हैं।