我正在使用grep -B2"平均/返回" / home / me /桌面/文件, 如何在第一行获得所需的单线输出 被添加到第二行但是与第二行分开??
some words here
average / return 1,2 4 5,6
--
other words here
average / return 4,3 7 9,4
--
期望的输出:
some words here average / return 1,2 4 5,6
--
other words here average / return 4,3 7 9,4
--
答案 0 :(得分:2)
您可以将结果传递给sed
:
grep ... | sed '/^--$/!{N;s/\n/ /g}'
<强>解释强>
sed命令适用于那些不包含分隔符的行:/^--$/!
。在下面的块中,N
用于从输入获取另一行并将其附加到模式缓冲区。最后,substitute命令用于将换行替换为4个空格:s/\n/ /g
。
只会打印包含分隔符--
的行。 (请注意,如果您不希望它们包含在输出中,您可以将--no-group-separator
传递给grep命令。谢谢@fedorqui)
<强>输出:强>
some words here average / return 1,2 4 5,6
--
other words here average / return 4,3 7 9,4
--
答案 1 :(得分:1)
保持简单,丢失grep和pipe等命令,只需在原始文件中使用awk:
awk '/average \/ return/{print prev "\t" $0} {prev=$0}' file
如果您认为有用,可以在输出行之间添加包含--
的行:
awk '/average \/ return/{print prev "\t" $0 "\n--" } {prev=$0}' file
e.g。
$ cat file
it was the
some words here
average / return 1,2 4 5,6
best of times
it was the
other words here
average / return 4,3 7 9,4
worst
of times
$ awk '/average \/ return/{print prev "\t" $0} {prev=$0}' file
some words here average / return 1,2 4 5,6
other words here average / return 4,3 7 9,4
$ awk '/average \/ return/{print prev "\t" $0 "\n--" } {prev=$0}' file
some words here average / return 1,2 4 5,6
--
other words here average / return 4,3 7 9,4
--
答案 2 :(得分:0)
您可以尝试将输出汇总到tr
命令,如下所示:
grep -B2 "average / return" /home/me/Desktop/file | tr '\n' '\t'