Linux 在grep中的每个结果后添加空行
我的grep命令如下所示 zgrep-B bb-A aa“模式”* 我希望输出为:Linux 在grep中的每个结果后添加空行,linux,scripting,grep,Linux,Scripting,Grep,我的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 fil
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
file1:line1
文件1:第2行
文件1:第3行
文件1:模式
文件1:第4行
文件1:第5行
文件1:第6行
文件2:第1行
文件2:第2行
文件2:第3行
文件2:模式
文件2:第4行
文件2:第5行
文件2:第6行
问题在于,很难区分第一个查找结果对应的行何时结束,第二个查找结果对应的行何时开始
请注意,尽管man grep说“-”是在连续的匹配组之间添加的。只有在同一个文件中找到多个匹配项时,它才起作用。但在我的搜索中(如上所述),我正在搜索多个文件
还要注意的是,在每个bb+aa+1行之后添加一个新的空行将不起作用,因为如果一个文件在模式之前的行数少于bb行该怎么办。通过管道grep输出
awk -F: '{if(f!=$1)print ""; f=$1; print $0;}'
在
grep
中没有这个选项,我不认为有办法用xargs
或tr
(我试过了),但这里有一个for循环可以做到这一点(for f in*;do grep-H“1”$f&&echo;done
):
-H
用于显示grep
匹配的文件名。如有必要,将*
更改为您自己的文件glob/path扩展字符串。我无法使用-A和-B参数对其进行测试,因此我不能确定,但您可以尝试使用sed G,如本文所述。如果这很重要的话,你会失去色彩。试试-c2;通过打印上下文,我看到grep正在分离其找到的o/p
问题在于,很难区分第一个查找结果对应的行何时结束,第二个查找结果对应的行何时开始
请注意,尽管man grep说“-”是在连续的匹配组之间添加的。只有在同一个文件中找到多个匹配项时,它才起作用。但在我的搜索中(如上所述),我正在搜索多个文件
如果您不介意用-
代替
,请将-0
参数添加到grep
/zgrep
命令中。这样,即使在搜索多个文件时,--
也会出现。您仍然可以根据需要使用-A
和-B
标志。管道|
任何输出:
例子:
如果您man sed
您将看到
G
Append是一个换行符,后跟保留空间的内容到模式空间。您还可以使用--group separator参数,该参数的值为空,因此它只需添加一个新行
some-stream | grep --group-separator=
grep-H将有助于区分输出。@williampersell这有什么作用?我试过了,但没有发现任何区别。@JoshuaPinter
-H
只是将文件名添加到每个输出的开头。当只有一个文件作为参数传递给grep时,情况就不同了。“不过,在这种情况下,它似乎并没有实际帮助。”威兰普尔塞尔感谢您的回复。我以为我错过了什么。:)请在以下链接中查看使用sed的有效解决方案:它有效,我投了赞成票,谢谢!一个缺点是我用这种方式松开了--color。@moejoe,我想你可以通过将其转换为--color=always
,将call--color
返回。因为在默认情况下,如果您的输出不是终端,则当您通过管道传输到其他进程时,颜色将被抑制。您可以始终再次grep
。对于相同的字符串,在重新引入颜色语法或进一步缩小搜索范围之前,您需要对其执行grep
ped操作。希望这能有所帮助。for
进入了无休止的循环
sed G
ls | sed G
some-stream | grep --group-separator=