2011-11-25 117 views
9

我grep命令看起來像這樣 zgrep -B BB -A AA 「模式」 *添加空白行

我會艾克有作爲輸出:

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 

問題難以區分何時開始對應於第一個找到的結果的行和對應於第二個找到的結果的行。

請注意,儘管man grep表示在連續的一組匹配之間添加了「 - 」。它僅在同一文件中找到多個匹配項時才起作用。但在我的搜索(如上)我搜索多個文件。

還注意到,在每個bb + aa + 1行之後添加一個新的空白行將不起作用,因爲如果文件在該模式之前的行數少於bb行,會發生什麼情況。

+3

grep -H將幫助區分輸出。 –

回答

15

管道grep的輸出通過

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

它的工作原理和我upvoted,謝謝!缺點是我鬆了 - 用這種方法塗色。 – moejoe

+0

@moejoe,我想你會把'--color'變成'--color = always'。因爲默認情況下,如果您輸出的不是終端,那麼當您輸入其他進程時顏色被抑制。 –

0

有一個在grep沒有選擇這個,我不認爲有一種方法與xargstr(我試過)做到這一點,但這裏是一個for循環,將做到這一點(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 

-H是爲grep比賽顯示的文件名。如有必要,請將*更改爲您自己的文件全局/路徑擴展字符串。

1

我不能用-A和-B參數測試它,所以我不能肯定地說,但你可以嘗試使用sed G,如Unix StackEx所述。如果這很重要,你會失去色彩。

0

試用-c 2;在打印上下文時,我看到grep正在分離找到的o/p