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
つまり、。にabcdef
1つあります。 IPv6アドレスは16進数です。d
671d
以下を追加する必要があります。
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進数も処理する必要がある場合は、括弧内に使用してください。