grep -v
反转匹配,因此我可以从输入/文件中排除行。
如果模式匹配,是否可以排除两行?
printf "foo\nbar\nbaz\n" | grep -A1 -v foo
不起作用。我希望这段代码仅输出baz
,但它输出
bar
baz
答案 0 :(得分:1)
-A
,-B
和-C
标志导致为满足搜索条件的每一行打印指定数量的上下文行。当您使用-v
时,搜索条件将反转,因此所选行是与模式不匹配的行。因此,grep -A1 -v foo
将打印不包含foo
的所有行,以及不包含foo
的行之后的行。
我知道这不是您要寻找的,但这是指定grep
起作用的方式。据我所知,没有任何选项,这禁止显示线的图案匹配后的印刷。
但是,它很容易使用足以完成这一壮举awk
:
awk '/foo/{c=2} c{c--;next;} 1'
请注意,awk
使用Posix扩展正则表达式,例如grep -E
。正则表达式必须用斜杠包围,这意味着您需要反斜杠转义任何需要匹配的斜杠。除此之外,它将与grep
非常相似。