1

我的测试文件是:

PolicyChain:ComplementaryUser Caught
PolicyChain:SourceIP Caught

我的正则表达式是:

cat testfile | grep -E -o '[^PolicyChain:].+?'

它匹配:

mplementaryUser Caught
SourceIP Caught

我最终只是想在冒号之后但在空格之前匹配字符串。请帮忙??

4

3 回答 3

5

[^PolicyChain:]是一个字符类,它与, , , , , , , , , ,或中的一个不是(由 指示^)的字符匹配。PolicyChain:

然后你匹配一个或多个字符, lazily .+?

由于正则表达式必须从匹配非 c (第一个标记)开始,它不能从Cof开始匹配ComplementaryUser

我建议您使用字符类的决定是一个错误,而您想要一个积极的后视,例如(?<=^PolicyChain:)http ://www.regular-expressions.info/refadv.html

积极的lookbehind 意味着'看看我当前的位置并尝试匹配这个lookbehind 正则表达式。如果它匹配,我们可以继续主正则表达式的其余部分。如果不匹配,我们将无法继续。

但是请注意,lookaheads 和 lookbehinds 不符合 POSIX,您必须使用以 perl 为主题的正则表达式 (PCRE) 才能拥有它们。(或 .NET、Python、Java、Ruby...)

于 2013-06-13T00:16:32.803 回答
2

试试这个。

cat testfile | sed -e "s/.*:\([^ ][^ ]*\).*/\1/"
于 2013-06-13T00:22:27.907 回答
0

您可以简单地使用 cut:

echo "PolicyChain:ComplementaryUser Caught" | cut -d: -f 2
于 2013-06-13T00:31:39.150 回答