search - grep एक फ़ाइल, लेकिन कई आसपास की लाइनें दिखाओ?




logging command-line-interface (6)

ripgrep

यदि आप प्रदर्शन की परवाह करते हैं, तो ripgrep उपयोग ripgrep जिसमें grep समान वाक्यविन्यास है, उदाहरण के लिए

rg -C5 "pattern" .

-C , --context NUM - प्रत्येक मैच से पहले और बाद में NUM पंक्तियां दिखाएं।

-A / - --after-context और -B / --after-context पैरामीटर भी हैं।

उपकरण जंग के रेगेक्स इंजन के शीर्ष पर बनाया गया है जो इसे बड़े डेटा पर बहुत ही efficient बनाता है।

मैं एक स्ट्रिंग के लिए grep करना चाहता हूं, लेकिन पिछली पांच पंक्तियों और निम्नलिखित पांच लाइनों के साथ-साथ मिलान लाइन भी दिखाऊंगा। मैं यह कैसे कर पाऊंगा?


"/Some/file.txt" में "17655" के लिए खोजें, पहले और बाद में (Awk का उपयोग करके) 10 लाइन संदर्भ दिखाते हुए, एक कॉलन के बाद लाइन नंबर से पहले आउटपुट। सोलारिस पर इसका इस्तेमाल करें जब 'grep' "- [एसीबी]" विकल्पों का समर्थन नहीं करता है।

awk '

/17655/ {
        for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
                print before[i]
        }
        print (NR ":" ($0))
        a = 10
}

a-- > 0 {
        print (NR ":" ($0))
}

{
        before[b] = (NR ":" ($0))
        b = (b + 1) % 10
}' /some/file.txt;

मैं आमतौर पर उपयोग करता हूं

grep searchstring file -C n # n for number of lines of context up and down

Grep जैसे कई टूल में भी वास्तव में महान आदमी फाइलें हैं। मैं खुद को grep के मैन पेज का जिक्र कर रहा हूं क्योंकि आप इसके साथ इतना कुछ कर सकते हैं।

man grep

कई जीएनयू टूल्स में एक सूचना पृष्ठ भी होता है जिसमें मैन पेज के अलावा अधिक उपयोगी जानकारी हो सकती है।

info grep

ack grep के समान तर्कों के साथ काम करता है, और स्वीकार करता है- -C । लेकिन यह आमतौर पर कोड के माध्यम से खोज के लिए बेहतर है।


-A और -B काम करेंगे, जैसे- -C n (संदर्भ की n लाइनों के लिए), या बस -n (संदर्भ की n लाइनों के लिए)।


बीएसडी या जीएनयू grep आप मैच के पहले लाइनों की -B num लिए कितनी लाइनें सेट कर सकते हैं और मैच के बाद लाइनों की संख्या के लिए -A num निर्धारित करने के लिए -B num का उपयोग कर सकते हैं।

grep -B 3 -A 2 foo README.txt

यदि आप -C num उपयोग कर सकते हैं इससे पहले और बाद में आप लाइनों की एक ही संख्या चाहते हैं।

grep -C 3 foo README.txt

यह 3 लाइनों और 3 लाइनों के बाद दिखाएगा।






command-line-interface