Grep और फ़ाइल पैटर्न के साथ पुनरावर्ती पाठ खोज


46

इस उदाहरण फ़ोल्डर संरचना को देखते हुए:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

मैं "/" से सभी *.txtफ़ाइलों पर एक पुनरावर्ती पाठ खोज कैसे करूं grep?

( "grep -r <pattern> *.txt"विफल रहता है जब "/" से चलाया जाता है, क्योंकि .txtउस फ़ोल्डर में कोई फ़ाइल नहीं है ।)

जवाबों:


61

ग्नू ग्रीप के मेरे संस्करण में इसके लिए एक स्विच है:

grep -R --include='*.txt' $Pattern

निम्नानुसार वर्णित:

--include=GLOB

केवल उन्हीं फाइलों को खोजें, जिनका आधार नाम GLOB से मेल खाता है (वाइल्डकार्ड मिलान के रूप में --exclude के तहत वर्णित है)।


19

यदि आपके पास बड़ी संख्या में फाइलें हैं, तो 'तर्क' सूची से बचने के लिए कमांड में xargs को शामिल करने के लिए उपयोगी होगा।

find . -name '*.txt' -print | xargs grep <pattern>

6
यदि फ़ाइल या निर्देशिका नामों में से किसी में स्थान हैं, तो इस फ़ॉर्म का उपयोग करें: ढूंढें। -नाम '* .txt' -print0 | xargs -0 grep <पैटर्न>
जेसन लूथर

2
और निश्चित रूप से फ़ाइल नाम का मुद्दा है जो इसके साथ शुरू होता है -
टीजे क्राउडर

grepकी तेजी से होता है find
नबी

2

आप अपने से उपयोग करने में सक्षम हो सकता है zshके EXTENDED_GLOBविकल्प ( डॉक्स )

grep <pattern> **/*.txt

केवल अगर ओपी zsh का उपयोग कर रहा है, लेकिन फिर भी दिलचस्प है।
Law29

1

आप http://betterthangrep.com पर ack पर एक नज़र डालना चाह सकते हैं , जिसमें फाइलपाइप द्वारा खोज करने के लिए फ़ाइलों का चयन करने की सुविधा है।


0
find . -name '*.txt' -type f -exec grep <pattern> {} \;

आप इसके बजाय "ढूंढना चाहते हैं।" -name '* .txt' -type f -exec grep <पैटर्न> {} + "का उपयोग कर सकते हैं, ताकि यह मार्क रॉबिन्सन के साथ क्रिया के समान व्यवहार करता है - केवल GNU के साथ काम करता है मेरी जानकारी के लिए खोजें
सर्वरहोर

0

मन्निस का जवाब हर टेक्स्टफाइल के लिए एक नया grep-प्रक्रिया देना होगा। यदि आपके पास बहुत सारे टेक्स्टफाइल्स हैं, तो आप हर फ़ाइल को पहले करने पर विचार कर सकते हैं और जब आवश्यक हो तो .txt-files को चुनें:

grep -r <pattern> * | grep \.txt:

यह अधिक डिस्क-गहन है, लेकिन वैसे भी तेज हो सकता है।


0

यह 2019 है और कोई तरीका नहीं है कि मैं अभी भी पुनरावर्ती पाठ खोज के लिए grep का उपयोग करूंगा।

IMHO के आज के उत्तर में रिपरग्रेप शामिल होना चाहिए :

rg <pattern> -ttxt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.