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




logging command-line-interface (8)

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

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


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

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

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

man grep

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

info grep

Grep का प्रयोग करें

$ grep --help | grep -i context
Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM

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


अजीब में @Ygor समाधान यहाँ है

awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=3 a=3 s="pattern" myfile

नोट: पहले और बाद में लाइनों की संख्या के साथ a और b चर को बदलें।

यह सिस्टम के लिए विशेष रूप से उपयोगी है जो grep के -A , -B और -C पैरामीटर का समर्थन नहीं करता है।


"/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;

ripgrep

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

rg -C5 "pattern" .

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

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

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


grep astring myfile -A 5 -B 5

वह "अस्थिर" के लिए "myfile" grep करेगा, और प्रत्येक मैच से पहले और बाद में 5 लाइनें दिखाएगा





command-line-interface