Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在grep中的每个结果后添加空行_Linux_Scripting_Grep - Fatal编程技术网

Linux 在grep中的每个结果后添加空行

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

我的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
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=