regex - Grep(或者可能是正则表达式)在匹配之前或之后检查行上的模式

标签 regex grep

我有一个简单的 grep 命令,它返回文件中匹配的行。这就是问题所在:有时,当一行匹配时,我想在它之前包含该行。我想要的是一种方法来找到与某个模式匹配的所有行,然后使用不同的模式来查看每个结果之前的行是否匹配。

假设我想获取所有包含“bar”的行,并且仅当它们包含“foo”时才获取每行之前的行。给出这样的输入:

    Spam spam eggs eggs
    Let's all go to the bar.
    Blah Blah Blah foo.
    Meh.
    foo foo foo
    Yippie, a bar.

我想要这样的结果:

    Let's all go to the bar
    foo foo foo
    Yippie, a bar.

最佳答案

您可以使用 -B 选项在匹配之前包含上下文行(还有 -A 用于在匹配之后包含上下文行,以及 -C 用于包括前后的上下文行)。然后,您可以将结果通过管道传输到另一个 grep:

# Get all lines matching 'bar' and include one line of context before each match
# Then, keep only lines matching 'bar' or 'foo'
grep bar -B1 the-file | grep 'bar\|foo'

关于regex - Grep(或者可能是正则表达式)在匹配之前或之后检查行上的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1126872/

相关文章:

asp.net-mvc - asp.net mvc 4 - razor View 中的 DataAnnotations 验证(正则表达式)

java - 用于提取 Maven 构建日志中的错误的正则表达式

linux - 如何在 unix 或 linux 中基于 grep、sed 或 awk 获取 unix 目录中的文件名?

linux - 将 awk 输出通过管道传输到 grep

shell - Makefile 中的 for 循环无效

unix - 'ps aux' 的过滤器输出

linux - 忽略 find 命令中的目录

javascript - 使 javascript 的 Replace() 匹配多个单词

regex - 需要正则表达式来验证用户名

javascript - 1 个或多个整数后跟非整数的正则表达式