两个字符序列之间的匹配

时间:2015-03-09 03:25:56

标签: regex grep

我想匹配目标下的所有行:以及构建配置。因此,在这种情况下,我希望匹配OglGlmOglGlmTest,以及可能出现在目标下的任何其他内容:

以下捕获OglGlm

Targets:\s([^=\t\n]*)

但我不想继续添加\s([^=\t\n]*)

输入数据:

Information about project "OglGlm":

    Targets:
        OglGlm
        OglGlmTests

    Build Configurations:
        Debug
        Release

    If no build configuration is specified and -scheme is not passed then "Release" is used.

    Schemes:
        OglGlm

2 个答案:

答案 0 :(得分:1)

下面的grep命令会打印出Targets:Build Configurations:行之间的所有行。

$ grep -oPz '^\s*Targets:[^\n]*\n\K[\s\S]*?(?=\n[ \t]*Build Configurations:)' file
        OglGlm
        OglGlmTests

\K会丢弃先前在匹配时打印的匹配字符,[\s\S]*?将执行零或多个字符的非贪婪匹配。(?=..)称为正向前瞻断言,断言是否为匹配是否可能。

答案 1 :(得分:1)

这是一个简单的awk

awk '!NF {f=0} f; /Targets:/ {f=1}' file
        OglGlm
        OglGlmTests

在找到Targets之后打印所有行,直到第一个空行。