一起使用grep -A和-v开关

时间:2019-02-01 11:45:31

标签: parsing grep

grep -v反转匹配,因此我可以从输入/文件中排除行。

如果模式匹配,是否可以排除两行?

printf "foo\nbar\nbaz\n" | grep -A1 -v foo

不起作用。我希望这段代码仅输出baz,但它输出

bar
baz

1 个答案:

答案 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非常相似。