我的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行呢?
8条答案
按热度按时间vxqlmq5t1#
将
|
的任意输出通过管道发送到:示例:
如果你
man sed
你会看到G
在模式空间中追加一个换行符,后跟保持空间的内容。zaq34kh62#
管道grep输出通过
2mbi3lxu3#
问题在于难以区分对应于第一找到的结果的行何时结束以及对应于第二找到的结果的行何时开始。
请注意,尽管man grep说在连续的匹配组之间添加“--”。只有当在同一个文件中找到多个匹配项时才有效。但是在我的搜索中(如上所述)我正在搜索多个文件。
如果您不介意使用
--
代替</blank line>
,请将-0
参数添加到grep
/zgrep
命令中。这应该允许--
即使在搜索多个文件时也会出现。您仍然可以根据需要使用-A
和-B
标志。vmpqdwk34#
你也可以使用**--group-separator**参数,它的值为空,所以它只会添加一个新行。
yruzcnhs5#
我不能用-A和-B参数测试它,所以我不能肯定,但你可以尝试在Unix StackEx上使用这里提到的sed G。如果这很重要的话,你会失去颜色。
w7t8yxp56#
在
grep
中没有这样的选项,我不认为有一种方法可以用xargs
或tr
(我试过)来实现,但这里有一个for循环可以做到这一点(for f in *; do grep -H "1" $f && echo; done
):-H
用于显示grep
匹配项的文件名。如有必要,将*
更改为您自己的文件glob/path扩展字符串。avwztpqn7#
尝试使用-c 2;在打印上下文时,我看到grep正在分离它找到的o/p
jw5wzhpr8#
这里有一个解决方案,它对结果进行编号,在每个结果之间添加一个空行,修剪每个结果的前导空格,并强制显示grep的颜色:
使用示例: