今天使用egrep命令寻找ifconfig中含有IP的行(类似0.0.0.0即可),使用向后引用发现不能匹配到行,想了半天才找到原因,现在记录下来.
首先使用egrep匹配所有含有数字0-255的行:
ifconfig | egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
匹配含有IP的行,我想只用向后引用,命令为:
ifconfig | egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\1\.\1\.\1)'
却发现匹配不上
原因:\1匹配的不是()内正则表达式的匹配范围,而是()内正则表达式匹配之后的具体内容,如此处()内正则表达式匹配上了255,则\1就是255,而不再是0-255之间的任意一个数.
正确命令:
ifconfig | egrep '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'