उन फ़ाइलों को छोड़ दें जिनमें grep आउटपुट से टेक्स्ट की बहुत लंबी लाइनें हैं


18

मैं अक्सर अपने कोड में चीजों को खोजने के लिए grep कमांड चलाता हूं, लेकिन वेब प्रोजेक्ट्स के साथ समस्या यह है कि इसमें अक्सर JavaScript और CSS फाइलें संपीड़ित होती हैं, जो टेक्स्ट की एक बड़ी लाइन बनाती हैं, ताकि यदि कोई मैच मिल जाए, तो पूरी टर्मिनल विंडो हो। फिर एक 1000 लाइनों के लिए भरा, जो मैं देख रहा हूं उसे खोजने के लिए यह बहुत ही अव्यवहारिक है।

तो क्या ऐसी फ़ाइलों से बचने का एक तरीका है, जिनमें 200 से अधिक वर्णों की एकल पंक्तियाँ हैं?

जवाबों:


20

GNU grep और xargs के साथ:

grep -rLZE '.{200}' . | xargs -r0 grep pattern

वैकल्पिक रूप से, आप grep के उत्पादन में कटौती कर सकते हैं:

grep -r pattern . | cut -c1-"$COLUMNS"

या अपने टर्मिनल को पाठ को लपेटने के लिए नहीं कहेंगे यदि वह इसका समर्थन करता है:

tput rmam
grep -r pattern .

या उपयोग करें less -S

grep -r pattern . | less -S

3
अपने पहले उदाहरण से रेगेक्स का उपयोग करके, इनवर्ट मैच के साथ grep में पाइपिंग ... | grep -v -E '.{200}', काम करता है, भी। उदाहरण के लिए * .js फ़ाइलों की सभी पंक्तियों को ".name" के अंतर्गत ".name" के साथ खोजने के लिए, जो कि 200 वर्णों से अधिक नहीं हैं: find . -name "*.js" -exec grep -H \\.name {} \; | grep -v -E '.{200}'
गैरी एस। वीवर्स

3

विकल्प 1: आप एक निश्चित पैटर्न से मेल खाती फाइलों को बाहर कर सकते हैं:

grep --exclude='*.min.*'

यह शामिल नहीं होगा script.min.jsऔर style.min.css... अन्य grepविकल्प में शामिल हैं --exclude-from=FILEऔर--exclude-dir=DIR

विकल्प 2: मुझे यकीन नहीं है कि यह व्यावहारिक है, लेकिन आप cutप्रत्येक पंक्ति के पहले 200 वर्ण कर सकते हैं , और फिर grepउन्हें:

grep -H [OPTIONS] PATTERN [FILE...] | cut -c1-200 | grep PATTERN

पहला grepएक प्रारंभिक मिलान करता है और फ़ाइल नाम और लाइन को आउटपुट करता है, दूसरा यह सुनिश्चित करता PATTERNहै cutकि लाइनों को टिंग करने के बाद भी वहाँ है ।


2

इस तरह की स्थिति में, मैं पड़ोस के संदर्भ के साथ एक पैटर्न को पकड़ना पसंद करता हूं (30 वर्ण कहते हैं)

grep -Po '.{0,30}pattern.{0,30}' *.js
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.