我的grep命令看起来像这样zgrep -B bb -A aa“pattern”*
我会想输出为:
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
问题在于,难以区分第一个find的结果对应的行和第二个find的结果对应的行是否开始。
请注意,尽pipeman grep表示在连续的一组匹配之间添加了“ – ”。 只有当在同一个文件中find多个匹配时它才起作用。 但在我的search(如上)我search多个文件。
还要注意的是,在每个bb + aa + 1行之后添加一个新的空白行将不起作用,因为如果一个文件在该模式之前的行数less于bb行。
管道grep输出通过
awk -F: '{if(f!=$1)print ""; f=$1; print $0;}'
我不能用-A和-B参数测试它,所以我不能肯定地说,但是你可以尝试在Unix StackEx上使用sed G。 如果这很重要的话,你会失去色彩。
在grep
没有这个选项,我不认为有办法用xargs
或tr
(我试过),但是这里是一个for循环,它会做到这一点( for f in *; do grep -H "1" $f && echo; done
):
[ 11:58 jon@hozbox.com ~/test ]$ for f in *; do grep -H "1" $f && echo; done a:1 b:1 c:1 d:1 [ 11:58 jon@hozbox.com ~/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
匹配的文件名。 根据需要将*
更改为您自己的文件全局/路径扩展字符串。
尝试使用-c 2; 打印上下文,我看到grep正在分离它找到的o / p