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

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

0
ro fr bn
Solaris पर काम करने वाले समाधान के लिए, देखें यह लिंक
जोड़ा लेखक jahroy, स्रोत
<�कोड> मैन grep | grep-c 1 "\ -C" ;)
जोड़ा लेखक Anders B, स्रोत
मैं इस उद्देश्य के लिए ब्रेंडन ग्रेग की पर्ल स्क्रिप्ट की प्रतिलिपि रखता हूं। अच्छा काम करता है।
जोड़ा लेखक Ethan Post, स्रोत
<�कोड> मैन grep | grep -C 1 संदर्भ :)
जोड़ा लेखक StvnW, स्रोत

9 उत्तर

grep astring myfile -A 5 -B 5

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

0
जोड़ा
"grep astring myfile -C 5" वही करेगा
जोड़ा लेखक Syed Siraj Uddin, स्रोत

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

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

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

man grep

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

info grep
0
जोड़ा

ack works with similar arguments as grep, and accepts -C. But it's usually better for searching through code.

0
जोड़ा
कई तरीकों से gck grep से बेहतर है। यह एक सरल वाक्यविन्यास के साथ तेज है।
जोड़ा लेखक chim, स्रोत
एएसी भी समर्थन करता है -ए-बी।
जोड़ा लेखक Shuo, स्रोत

Here is the @Ygor solution in awk

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 पैरामीटर का समर्थन नहीं करता है।

0
जोड़ा

ripgrep

If you care about the performance, use ripgrep which has similar syntax to grep, e.g.

rg -C5 "pattern" .

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

-A / - बाद के संदर्भ और -B / - पहले-संदर्भ </कोड जैसे पैरामीटर भी हैं >।

टूल जंग का रेगेक्स इंजन के शीर्ष पर बनाया गया है जो इसे बहुत कुशल

0
जोड़ा

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
0
जोड़ा
ओह, मुझे खेद है योकई। लेकिन मैं उत्तर प्राप्त करने के लिए grep के सहायता अनुभाग को grepping के बारे में कुछ भी नहीं पढ़ता।
जोड़ा लेखक Chiel ten Brinke, स्रोत
क्या आपने स्वीकृत उत्तर नहीं पढ़ा? आप बस दोहरा रहे हैं कि लगभग 10 साल पुराने प्रश्न पर क्या कहा जा चुका है ...
जोड़ा लेखक Yokai, स्रोत

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

grep -B 3 -A 2 foo README.txt

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

grep -C 3 foo README.txt

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

0
जोड़ा
Solaris grep इस का समर्थन नहीं करता है। लेकिन gnu grep Solaris का समर्थन करता है।
जोड़ा लेखक guettli, स्रोत
यह अच्छा है लेकिन दुर्भाग्य से सोलारिस grep उस का समर्थन नहीं करता है। सोलरिस के लिए यह लिंक देखें: unix.com/ सोलारिस/33,533-ग्रेप-प्रदर्शन-कुछ लाइनों पहले after.h और जेडडब्ल्यूएनजे; टीएमएल
जोड़ा लेखक рüффп, स्रोत
ठीक है, लेकिन अगर मैच के बाद आउटपुट की सभी पंक्तियां दिखाना चाहते हैं तो क्या होगा? grep -A0 और grep -A-1 इसे काट नहीं है ...
जोड़ा लेखक g33kz0r, स्रोत
@ g33kz0r, उस मामले में आपको एक अलग प्रश्न में पूछना चाहिए। (भले ही किसी ने आपको जवाब देने में परेशानी ली, मुझे क्यों धड़कता है ...)
जोड़ा लेखक alexis, स्रोत
यदि आप एचपी-यूएक्स एनवी हैं, तो कोई भी grep संस्करण सोलारिस में काम नहीं करेगा। सोलारिस लिंक का उपयोग करने में सक्षम था लेकिन उस लिंक में अजीब के साथ नॉक को प्रतिस्थापित करें।
जोड़ा लेखक zkarthik, स्रोत
ruffp: मुझे विश्वास है कि GNUgrep भी है
जोड़ा लेखक Mailo, स्रोत
मेरे लिए कुछ कारणों से काम नहीं करता है, हालांकि मेरे मैन पेजों में उल्लेख किया गया है।
जोड़ा लेखक Hayri U?ur Koltuk, स्रोत
-एन लाइन संख्याओं के लिए है, लेकिन grep -n # के कुछ संस्करणों के लिए लाइन संख्याओं के साथ # आस-पास की रेखाएं (जैसे -c) दिखाई देगी। यह एक उपयोगी शॉर्टकट है जो मुझे संदर्भ की आवश्यकता होने पर जाना जाता है।
जोड़ा लेखक Anthony DiSanti, स्रोत
यह "विंडोज़ पर उबुनुतू पर भी बैश" पर काम करता है! लिनक्स के लिए विंडोज सबसिस्टम इस लेखन के रूप में उबंटू 14.04.4 एलटीएस का उपयोग करता है।
जोड़ा लेखक Adam Venezia, स्रोत

-A and -B will work, as will -C n (for n lines of context), or just -n (for n lines of context).

0
जोड़ा
+1 - -5 -A 5 -B 5 से टाइप करने के लिए तेज़ है
जोड़ा लेखक mouche, स्रोत

"/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;
0
जोड़ा