linux grep 获取ip,Linux 获得纯ip信息 grep/sed/awk/正则表达式

先用grep得到ip所在行:

ip a | grep inet | grep -v inet6

0cff04a91a7cdd3a285a80c1f47a816d.png

1.用awk命令获得ip

awk命令类似cut命令,但是awk的分割符可以是多个字符,cut只能以单个字符作为分割符。

以'inet '为分割符,打印得到其后的内容,再用'/'做分割符,打印得到其前的内容。-F指定分割符。

ip a | grep inet | grep -v inet6 | awk -F 'inet ' '{print $2}' | awk -F '/' '{print $1}'

b1e3ca94a77d39348a2675b4e2366b03.png

其实cut命令也可以:ip a | grep inet | grep -v inet6 | cut -d ' ' -f 6 | cut -d '/' -f 1

第一次切到第6段是因为,inet前面有4个空格,inet后面1个空格,ip地址字段前面有5个空格,所以ip地址字段是第6段。

c1240712fbdce14537b0f28a36e50868.png

2.用sed命令获得ip

先将'inet '替换成空(两个单引号),再把'/'后面替换成空。

在单引号里面的/要用\转义,.*表示任意长字符串,$表示行尾。

ip a | grep inet | grep -v inet6 | sed s/'inet '/''/g | sed s/'\/.*$'/''/g

a0566e6fb715272cbf7f28f58b0cf3e6.png

得到ip所在行,还有一种花里胡哨的写法

得到ip所在行,还有一种正则表达式的写法,效果同ip a | grep inet | grep -v inet6

ip a | egrep "((1[0-9]|2[0-5])|[1-9])?[0-9]{1}\.((1[0-9]|2[0-5])|[1-9])?[0-9]{1}\.((1[0-9]|2[0-5])|[1-9])?[0-9]{1}\.((1[0-9]|2[0-5])|[1-9])?[0-9]{1}"

472bfb2351a11cb82d961f858e346df6.png

这种写法能匹配上的数字范围是多少?我们来分析一下。

ip地址以.分割,有4个字段,每个字段对应的正则表达式都是一样的,只要看其中一个: ( (1[0-9]|2[0-5]) | [1-9] )?[0-9]{1}\.

{1}表示前面的[0-9]一定有一个,也就是个位数为0-9

?表示前面的((1[0-9]|2[0-5])|[1-9])要么有,要么没有。有的话就是10~25或者1~9,配合上个位数,最终就是100~259或者10~99;没有的话最终就只有个位数0~9。

综上所述,单个字段匹配范围是0-259,这么写显然是有漏洞的,单个会匹配上256,四个字段就会匹配256.256.256.256,而ip每个字段都不可能超过255。

可以验证一下,这样写,会完全匹配上256.256.256.256。

echo 256.256.256.256 | egrep "((1[0-9]|2[0-5])|[1-9])?[0-9]{1}\.((1[0-9]|2[0-5])|[1-9])?[0-9]{1}\.((1[0-9]|2[0-5])|[1-9])?[0-9]{1}\.((1[0-9]|2[0-5])|[1-9])?[0-9]{1}"

4687c25239de7d394fa6f6458492a702.png

附:正则表达式

^ : ^word,待搜索的字符串在⾏⾸;

$ : word$,待搜索的字符串的⾏尾;

. : ⼀定有⼀个任意字符;

\ : 将特殊符号转义为⼀般字符;

* : 重复前⼀个字符,零到⽆穷多个。比如o*

.*为任意字符串;

[ ] : 字符集合,从中选⼀个;

[^ ] : 字符集合,不要的字符或范围;

[n1-n2] : 字符范围,[0-9]、[a-z];

{n, m} : 连续n个到m个的前⼀个字符;比如o{3,5}

+ : ⼀个或⼀个以上;比如o+

? : 零个或⼀个;比如o?

| : 或;

( ) : 组群.

本文同步分享在 博客"nefu_ljw"(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值