2 qq 25096021 qq_25096021 于 2016.02.02 17:21 提问

shell编程问题 sed使用

sed -nr 's/.*inet (addr:)?(([0-9]*.){3}[0-9]*).*/\2/p'

求大神解释下这句

这正则没看太懂,.* 这是指n个 . 吗 ? \2这是将前边替换成2?

求说明下全句

这句是用来找出ip中的一部分
/sbin/ifconfig $(/sbin/ifconfig|grep eth|awk '{print $1}'|sed -n '1p')| sed -nr 's/.*inet (addr:)?(([0-9]*.){3}[0-9]*).*/\2/p'

sed之前明白,之后的不懂,求教

2个回答

oyljerry
oyljerry   Ds   Rxr 2016.02.02 18:45

\2是正则表达式中的分组捕获,也就是用第二个分组进行替换
.*是先匹配inet前面的任意多个字符

fateflv
fateflv   2016.03.07 15:41

图片说明

看下面这张图来解析那个正则表达式就清楚一点了。
图片说明

fateflv
fateflv 说错了一个地方: 会输出第一组匹配到的内容,即 addr: 那个问号在那里是表示它前面紧接的那个字符可有可无,也就是那个冒号可以有也可以没有。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!