如何仅 grep 行之前和之上的行?

如何仅 grep 行之前和之上的行?

如何在我的行之前和之上只 grep 一行或两行,我使用

 grep --color=always -Irn -E 'foo|bar'

但它在所有文档中找到了以下几行:

foo.md:10:foo
foo.md:142:bar

我只需要附近的线条的巧合,一条或两条。

foo.md:10:foo
foo.md:12:bar

类似这样的。

答案1

我尝试寻找了几个小时,但它总是如此简单:

grep --color=always -Irn 'foo' -A1 -B1 | grep -In --color=always "bar" -A2 -B1

找到“foo”和“-A1”之后 1 行以及“-B1”之前 1 行,将其传递给第二个 grep 并使用关键字“bar”进行处理,然后就完成了!-I 表示忽略二进制文件,-r 表示递归搜索,-n 表示输出行号。--color=always - 突出显示匹配的字符串。

答案2

使用第一个 grep 获取上下文行,然后使用第二个 grep 过滤出匹配行:

grep -C 1 'foo' | grep -v 'foo'

相关内容