1

私のテストファイルは次のとおりです。

PolicyChain:ComplementaryUser Caught
PolicyChain:SourceIP Caught

私の正規表現は次のとおりです。

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

それは一致します:

mplementaryUser Caught
SourceIP Caught

私は最終的に、コロンの後、スペースの前の文字列を一致させようとしています。助けてください??

4

3 に答える 3

5

[^PolicyChain:]、 、 、 、 、、、、またはのいずれでもない(^で示される) 1 文字に一致する文字クラスです。PolicyChain:

次に、遅延して 1 文字以上の文字を照合します.+?

正規表現は非 c (最初のトークン) のマッチングから開始する必要があるため、Cof でマッチングを開始することはできませんComplementaryUser

文字クラスを使用するというあなたの決定は誤りであり、代わりに次のような肯定的な後読みが必要であることをお勧めします(?<=^PolicyChain:): http://www.regular-expressions.info/refadv.html

肯定的な後読みは、「現在の位置の後ろを見て、この後読み正規表現と一致させようとする」ことを意味します。一致する場合は、メインの正規表現の残りを続行できます。一致しない場合は続行できません。

ただし、先読みと後読みは 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

単純にカットを使用できます:

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