2011-11-25 142 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