![如何仅 grep 行之前和之上的行?](https://linux22.com/image/1166739/%E5%A6%82%E4%BD%95%E4%BB%85%20grep%20%E8%A1%8C%E4%B9%8B%E5%89%8D%E5%92%8C%E4%B9%8B%E4%B8%8A%E7%9A%84%E8%A1%8C%EF%BC%9F.png)
如何在我的行之前和之上只 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'