egrep正規表現:[および]またはドットが一致しない文字クラス

egrep正規表現:[および]またはドットが一致しない文字クラス

IPv6アドレスを角かっこで一致させようとしていますが、驚くほど詰まっています...

働く:

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \(.+\)\.$'

一致しません(しかし、文字クラスの点が有効だと思います)。

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([.]+\)\.$'

次のような他の試み

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([][0-9:]+\)\.$'
echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([[]0-9:]+\)\.$'
echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([]0-9:[]+\)\.$'
echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([\[\]0-9:]+\)\.$'

動作しません...

ここで何が起こっていますか?

答え1

最初のものは、など\([.]+\)のテキスト括弧内のテキストポイントと一致します。(...)他のものは上記の16進数と一致しません。9つまり、。にabcdef1つあります。 IPv6アドレスは16進数です。d671d

以下を追加する必要があります。

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([][0-9a-f:]+\)\.$'

またはもっと厳密に言うと:

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \(\[[0-9a-f:]+\]:[0-9]+\)\.$'

または、a-fA-F大文字の16進数も処理する必要がある場合は、括弧内に使用してください。

関連情報