我想匹配目标下的所有行:以及构建配置。因此,在这种情况下,我希望匹配OglGlm
和OglGlmTest
,以及可能出现在目标下的任何其他内容:
以下捕获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
答案 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
之后打印所有行,直到第一个空行。