2012-09-16 9 views
59

हाय मैं प्रोग्रामिंग के लिए बहुत नया हूं। मैं किसी दिए गए पाठ में खोज करने का एक तरीका चाहता हूं। इसके लिए मैं grep फ़ंक्शन का उपयोग करता हूं:grep परिणाम के पहले/बाद में मैं बैश में कैसे ला सकता हूं?

grep -i "my_regex" 

यह काम करता है। लेकिन इस तरह data दिया:

This is the test data 
This is the error data as follows 
. . . 
. . . . 
. . . . . . 
. . . . . . . . . 
Error data ends 

एक बार मैं शब्द error (grep -i error data का प्रयोग करके) पाया, मैं 10 लाइनों है कि शब्द error निम्नलिखित खोजने के लिए कामना करता हूं। तो मेरा आउटपुट होना चाहिए:

. . . 
    . . . . 
    . . . . . . 
    . . . . . . . . . 
    Error data ends 

क्या ऐसा करने के कोई तरीके हैं?

+0

आपके विवरण से ऐसा लगता है कि आप 'त्रुटि' शब्द को आगे बढ़ने वाली 10 पंक्तियां चाहते हैं। – ThomasW

उत्तर

129

आप मिलान से पहले और बाद में लाइनों को प्रिंट करने के लिए -B और -A का उपयोग कर सकते हैं।

grep -i -B 10 'error' data 

मेल खाने वाली लाइन समेत मैच से पहले 10 लाइनों को प्रिंट करेगा।

+0

धन्यवाद यह काम कर रहा है। लेकिन जब मैंने इस निष्पादन को इस 'test = $ (grep -i -b 10' त्रुटि 'डेटा) जैसे वैरिएबल में स्टोर करने का प्रयास किया, और इसे' echo $ test' का उपयोग करके प्रिंट करें, तो मुझे आउटपुट के रूप में सीधे लंबी लाइनें मिलती हैं। – sriram

+1

धन्यवाद मुझे पता चला है कि मुझे 'echo "$ test'' echo $ test ' – sriram

+1

' -C 10' की बजाय 10 लाइनों को मुद्रित करने के बाद और बाद में एक झुकाव गिरने की बजाय 'echo "$ test" की तरह करने की आवश्यकता है! –

5

इस प्रयास करें: दस लाइनों मैच के बाद

grep -i -A 10 "my_regex" 

-एक 10 साधन, प्रिंट "my_regex" करने के लिए

8

तरीका यह है आदमी पेज

grep -i -A 10 'error data' 
के शीर्ष के निकट है
3

यह पंक्तियों

grep -i "my_regex" -A 10 
मिलान करने के बाद पिछली संदर्भ की 10 पंक्तियां मुद्रित करता है

आप मिलान लाइनों से पहले प्रमुख संदर्भ के 10 लाइनों मुद्रित करने के लिए की जरूरत है,

grep -i "my_regex" -B 10 

और अगर आप अग्रणी और आउटपुट संदर्भ अनुगामी के 10 लाइनों मुद्रित करने के लिए की जरूरत है।

grep -i "my_regex" -C 10 

उदाहरण

[email protected]:~$ cat out 
line 1 
line 2 
line 3 
line 4 
line 5 my_regex 
line 6 
line 7 
line 8 
line 9 
[email protected]:~$ 

सामान्य ग्रेप

[email protected]:~$ grep my_regex out 
line 5 my_regex 
[email protected]:~$ 

Grep सटीक मिलान लाइनों और 2 लाइनों के बाद

[email protected]:~$ grep -A 2 my_regex out 
line 5 my_regex 
line 6 
line 7 
[email protected]:~$ 

Grep सटीक मिलान लाइनों और 2 लाइनों

[email protected]:~$ grep -B 2 my_regex out 
line 3 
line 4 
line 5 my_regex 
[email protected]:~$ 

Grep सटीक मिलान लाइनों और 2 लाइनों से पहले और बाद

[email protected]:~$ grep -C 2 my_regex out 
line 3 
line 4 
line 5 my_regex 
line 6 
line 7 
[email protected]:~$ 

संदर्भ से पहले: मैनपेज ग्रेप

-A num 
--after-context=num 

    Print num lines of trailing context after matching lines. 
-B num 
--before-context=num 

    Print num lines of leading context before matching lines. 
-C num 
-num 
--context=num 

    Print num lines of leading and trailing output context. 
संबंधित मुद्दे