我的测试文件是:
PolicyChain:ComplementaryUser Caught
PolicyChain:SourceIP Caught
我的正则表达式是:
cat testfile | grep -E -o '[^PolicyChain:].+?'
它匹配:
mplementaryUser Caught
SourceIP Caught
我最终只是想在冒号之后但在空格之前匹配字符串。请帮忙??
[^PolicyChain:]
是一个字符类,它与, , , , , , , , , ,或中的一个不是(由 指示^
)的字符匹配。P
o
l
i
c
y
C
h
a
i
n
:
然后你匹配一个或多个字符, lazily .+?
。
由于正则表达式必须从匹配非 c (第一个标记)开始,它不能从C
of开始匹配ComplementaryUser
。
我建议您使用字符类的决定是一个错误,而您想要一个积极的后视,例如(?<=^PolicyChain:)
:http ://www.regular-expressions.info/refadv.html
积极的lookbehind 意味着'看看我当前的位置并尝试匹配这个lookbehind 正则表达式。如果它匹配,我们可以继续主正则表达式的其余部分。如果不匹配,我们将无法继续。
但是请注意,lookaheads 和 lookbehinds 不符合 POSIX,您必须使用以 perl 为主题的正则表达式 (PCRE) 才能拥有它们。(或 .NET、Python、Java、Ruby...)
试试这个。
cat testfile | sed -e "s/.*:\([^ ][^ ]*\).*/\1/"
您可以简单地使用 cut:
echo "PolicyChain:ComplementaryUser Caught" | cut -d: -f 2