您grep
可以--group-separator
在小组比赛之间写一些东西。
这可以方便地明确我们有哪些块,特别是在使用-C X
选项获取上下文行时。
$ cat a
hello
this is me
and this is
something else
hello hello
bye
i am done
$ grep -C1 --group-separator="+++++++++" 'hello' a
hello
this is me
+++++++++
something else
hello hello
bye
我学到了使用空行作为 grep 的上下文“组分隔符”如何只有一个空行,通过说--group-separator=""
.
但是,如果我想要有两个空行怎么办?我试着说,--group-separator="\n\n"
但我得到了字面\n
意思:
$ grep -C1 --group-separator="\n\n" 'hello' a
hello
this is me
\n\n
something else
hello hello
bye
其他类似的事情--group-separator="\nhello\n"
也不起作用。
答案1
哦,我找到了,我只需要使用语法$''
而不是$""
:
$ grep -C1 --group-separator=$'\n\n' 'hello' a
hello
this is me
something else
hello hello
bye
从man bash
:
报价
$'string' 形式的单词会被特殊处理。该单词扩展为字符串,并按照 ANSI C 标准指定的方式替换反斜杠转义字符。反斜杠转义序列(如果存在)按如下方式解码:
(...) \n new line
答案2
我建议使用echo -e
或者printf
和\\n
换行。
示例(带有echo -e
):
$ grep -C1 --group-separator="$(echo -e line1\\n\\nline2)" 'hello' a
hello
this is me
line1
line2
something else
hello hello
bye
示例(带有printf
):
$ grep -C1 --group-separator="$(printf hello\\nfedorqui)" 'hello' a
hello
this is me
hello
fedorqui
something else
hello hello
bye
一个优点是我们正在使用双引号。 (因此变量扩展等起作用)