我正在尝试将 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
第一个 ,\([.]+\)
将匹配文字括号内的文字点,例如(...)
等。其他的与上面的十六进制数字不匹配9
,即abcdef
。有一个d
在671d
.请记住,IPv6 地址是十六进制的。
您需要添加这些,所以:
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
如果您还需要处理大写十六进制数字,请在括号内使用。