फ़ोल्डर के अंदर एक शब्द खोजने के लिए मैं grep का उपयोग कैसे कर सकता हूं?




(8)

विंडोज़ में, मैं एक फ़ोल्डर के अंदर एक शब्द खोजने के लिए एक खोज किया होता। इसी प्रकार, मैं जानना चाहता हूं कि निर्देशिका में एक विशिष्ट शब्द होता है जिसमें कई उप-निर्देशिकाएं और फ़ाइलें होती हैं। Grep वाक्यविन्यास के लिए मेरी खोज से पता चलता है कि मुझे फ़ाइल नाम निर्दिष्ट करना होगा, यानी grep string filename

अब, मुझे फ़ाइल नाम नहीं पता, तो मैं क्या करूँ? एक दोस्त ने grep -nr string करने का सुझाव दिया, लेकिन मुझे नहीं पता कि इसका क्या अर्थ है और मुझे इसके साथ कोई परिणाम नहीं मिला है (जब तक मैं ctrl + c जारी नहीं करता तब तक कोई प्रतिक्रिया नहीं होती है)।


  1. grep -r "yourstring" * किसी भी फाइल और फ़ोल्डर्स में "yourstring" मिलेगा

अब यदि आप एक ही समय में दो अलग-अलग तारों को देखना चाहते हैं तो आप हमेशा विकल्प ई का उपयोग कर सकते हैं और खोज के लिए शब्द जोड़ सकते हैं। ब्रेक के बाद उदाहरण

  1. grep -rE "yourstring|yourotherstring|$" * सूची स्थानों की खोज करेगा जहां yourstring या yourotherstring मैचों

@eLRuLL द्वारा पोस्ट किए गए उत्तर के समान, शब्द सीमाओं का सम्मान करने वाली खोज निर्दिष्ट करने का एक आसान तरीका -w विकल्प का उपयोग करना है:

grep -wnr "yourString" .

आपके द्वारा चुने गए उत्तर ठीक हैं, और यह काम करता है, लेकिन ऐसा करने का सही तरीका नहीं है, क्योंकि:

grep -nr yourString* .

यह वास्तव में स्ट्रिंग "yourStrin" और "g" 0 या कई बार खोजता है।

तो ऐसा करने का सही तरीका है:

grep -nr \w*yourString\w* .

यह आदेश मौजूदा फ़ोल्डर पर पहले और बाद में किसी भी वर्ण के साथ स्ट्रिंग को खोजता है।


उप निर्देशिकाओं में सभी उदाहरणों को खोजने के लिए एक पुनरावर्ती खोज क्यों न करें:

grep -r 'text' *

यह एक आकर्षण की तरह काम करता है।


वहाँ भी:

find directory_name -type f -print0 | xargs -0 grep -li word

लेकिन यह एक शुरुआत के लिए थोड़ा सा हो सकता है।

find एक सामान्य उद्देश्य निर्देशिका वॉकर / लिस्टर है, -type f मतलब है "निर्देशिकाओं और नामित पाइपों के बजाय सादे फाइलों की तलाश करें और आप क्या हैं", -print0 अर्थ है "उन्हें नल पात्रों का उपयोग करके मानक आउटपुट पर डिलीमीटर के रूप में प्रिंट करें"। find से आउटपुट xargs -0 भेजा जाता है और जो कि रिकॉर्ड विभाजक (मानक न्यूलाइन के बजाए) के रूप में शून्य वर्णों का उपयोग करके भाग में अपने मानक इनपुट को पकड़ता है (कमांड लाइन लंबाई सीमाओं से बचने के लिए) और प्रत्येक सेट में grep -li word लागू होता है फाइलों का grep , -l अर्थ है "मेल खाने वाली फ़ाइलों को सूचीबद्ध करें" और -i अर्थ है "केस असंवेदनशील"; आप आम तौर पर सिंगल कैरेक्टर विकल्पों को जोड़ सकते हैं ताकि आप -l -i से अधिक बार -l -i बार देखेंगे।

यदि आप -print0 और -0 उपयोग नहीं करते हैं तो आप फ़ाइल नामों के साथ समस्याओं में भाग लेंगे जिनमें रिक्त स्थान शामिल हैं, इसलिए उनका उपयोग करना एक अच्छी आदत है।


grep -nr string my_directory

अतिरिक्त नोट्स: यह सिंटैक्स grep [options] string filename संतुष्ट करता है क्योंकि यूनिक्स-जैसी प्रणालियों में, एक निर्देशिका एक प्रकार की फ़ाइल होती है (एक शब्द "नियमित फ़ाइल" होती है जो विशेष रूप से उन इकाइयों को संदर्भित करती है जिन्हें विंडोज़ में "फाइल" कहा जाता है )।

grep -nr string मानक इनपुट से खोजने के लिए सामग्री को पढ़ती है, यही कारण है कि यह आपके लिए इनपुट के लिए बस प्रतीक्षा करता है, और जब आप ^ सी दबाते हैं तो ऐसा करना बंद कर देता है (यह ^ डी पर भी रुक जाएगा, जो कि मुख्य संयोजन है फाइल के अंत के लिए)।


grep -nr 'yourString*' .

अंत में बिंदु वर्तमान निर्देशिका की खोज करता है। प्रत्येक पैरामीटर के लिए मतलब:

-n            Show relative line number in the file
'yourString*' String for search, followed by a wildcard character
-r            Recursively search subdirectories listed
.             Directory for search (current directory)

grep -nr 'MobileAppSer*' . ( MobileAppServlet.java या MobileAppServlet.class या MobileAppServlet.txt ; 'MobileAppASer*.*' एक ही चीज़ करने का एक और तरीका मिलेगा।)

अधिक पैरामीटर जांचने के लिए मैन grep कमांड का उपयोग करें।


grep -nr search_string search_dir

search_string के लिए एक RECURSIVE (निर्देशिका और इसकी सभी उप-निर्देशिकाएं) खोज करेगा। (जैसा कि usta द्वारा सही ढंग से उत्तर दिया गया है)।

कारण आपको अपने मित्र के सुझाव के साथ कोई एन्वर नहीं मिल रहा था:

grep -nr string

ऐसा इसलिए है क्योंकि कोई निर्देशिका निर्दिष्ट नहीं थी। यदि आप निर्देशिका में हैं जो आप खोज करना चाहते हैं, तो आपको निम्न कार्य करना होगा:

grep -nr string .

'।' को शामिल करना महत्वपूर्ण है चरित्र, क्योंकि यह इस निर्देशिका को खोजने के लिए grep बताता है।