2011-11-25 13 views
9

मेरी ग्रेप आदेश इस zgrep -B bb -एक आ "पैटर्न" *ग्रेप में हर परिणाम के बाद खाली पंक्ति जोड़ें

मैं के रूप में उत्पादन के लिए lke होगा की तरह दिखता है:

file1:line1 
file1:line2 
file1:line3 
file1:pattern 
file1:line4 
file1:line5 
file1:line6 
      </blank line> 
file2:line1 
file2:line2 
file2:line3 
file2:pattern 
file2:line4 
file2:line5 
file2:line6 

समस्या यह है कि जब पहले पाए गए परिणाम अंत के अनुरूप रेखाएं और दूसरे मिले परिणाम के अनुरूप रेखाएं शुरू होती हैं तो यह अंतर करना मुश्किल होता है।

ध्यान दें कि यद्यपि मैन grep का कहना है कि "-" मैचों के संगत समूह के बीच जोड़ा जाता है। यह तभी काम करता है जब एक ही फ़ाइल में एकाधिक मिलान पाए जाते हैं। लेकिन मेरी खोज में (ऊपर के रूप में) मैं कई फाइलों को खोज रहा हूँ।

भी ध्यान रखें कि हर bb + आ + 1 लाइन के बाद एक नया रिक्त पंक्ति जोड़ने क्योंकि क्या हुआ अगर एक फ़ाइल पैटर्न से पहले bb लाइनों की तुलना में कम है काम नहीं करेगा।

+3

ग्रेप एच अलग है आउटपुट भेद करने में मदद करेगा। –

उत्तर

15

के माध्यम से पाइप ग्रेप उत्पादन

awk -F: '{if(f!=$1)print ""; f=$1; print $0;}' 
+0

यह काम करता है और मैं ऊपर उठाया, धन्यवाद! एक नकारात्मक बात यह है कि मैं इस तरह से ढीला - रंग। – moejoe

+0

@moejoe, आप 'फोन करने के लिए यह में बदल कर वापस --color'' --color = always', मुझे लगता है। क्योंकि द्वारा डिफ़ॉल्ट रंग यदि आप आउट-पुट टर्मिनल नहीं है, जो यह नहीं है दबा दिया जाता है, जब आप अन्य प्रक्रिया के लिए पाइप। –

0

grep में इस के लिए कोई विकल्प नहीं है और मैं नहीं लगता वहाँ xargs या tr (मैंने कोशिश की) के साथ यह करने के लिए एक रास्ता है, लेकिन यहाँ है एक पाश के लिए है कि यह (for f in *; do grep -H "1" $f && echo; done) करना होगा:

[ 11:58 [email protected] ~/test ]$ for f in *; do grep -H "1" $f && echo; done 

a:1 

b:1 

c:1 

d:1 

[ 11:58 [email protected] ~/test ]$ ll 
-rw-r--r-- 1 jon people  2B Nov 25 11:58 a 
-rw-r--r-- 1 jon people  2B Nov 25 11:58 b 
-rw-r--r-- 1 jon people  2B Nov 25 11:58 c 
-rw-r--r-- 1 jon people  2B Nov 25 11:58 d 

-Hgrep मैचों के लिए फ़ाइल नाम प्रदर्शित करने के लिए है। यदि आवश्यक हो तो * अपनी फ़ाइल ग्लोब/पथ विस्तार स्ट्रिंग में बदलें।

1

मैं इसे -ए और -बी पैरामीटर के साथ परीक्षण नहीं कर सकता, इसलिए मैं निश्चित रूप से नहीं कह सकता लेकिन आप Unix StackEx पर यहां वर्णित sed G का उपयोग करने का प्रयास कर सकते हैं। यदि आप महत्वपूर्ण हैं तो आप रंग खो देंगे।

0

-c 2 के साथ प्रयास करें; एक संदर्भ मुद्रण के साथ मैं ग्रेप अपने ओ/पी पाया