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个回答

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

图片说明

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

fateflv
fateland 说错了一个地方: 会输出第一组匹配到的内容,即 addr: 那个问号在那里是表示它前面紧接的那个字符可有可无,也就是那个冒号可以有也可以没有。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!