建筑工程找活网站,谈谈对网站建设的认识,大龄程序员都干啥去了,python基础教程pdf第三版先用grep得到ip所在行#xff1a; ip a | grep inet | grep -v inet6 1.用awk命令获得ip awk命令类似cut命令#xff0c;但是awk的分割符可以是多个字符#xff0c;cut只能以单个字符作为分割符。 以inet 为分割符#xff0c;打印得到其后的内容#xff0c;再用/做分割符 ip a | grep inet | grep -v inet6 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} 其实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段。 2.用sed命令获得ip 先将inet 替换成空(两个单引号)再把/后面替换成空。 在单引号里面的/要用\转义.*表示任意长字符串$表示行尾。 ip a | grep inet | grep -v inet6 | sed s/inet //g | sed s/\/.*$//g 得到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} 这种写法能匹配上的数字范围是多少我们来分析一下。 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} 附正则表达式 ^ : ^word待搜索的字符串在⾏⾸; $ : word$待搜索的字符串的⾏尾; . : ⼀定有⼀个任意字符; \ : 将特殊符号转义为⼀般字符; * : 重复前⼀个字符零到⽆穷多个。比如o* .*为任意字符串; [ ] : 字符集合从中选⼀个; [^ ] : 字符集合不要的字符或范围; [n1-n2] : 字符范围[0-9]、[a-z]; {n, m} : 连续n个到m个的前⼀个字符;比如o{3,5} : ⼀个或⼀个以上;比如o ? : 零个或⼀个;比如o? | : 或; ( ) : 组群. 本文同步分享在 博客nefu_ljw(CSDN)。 如有侵权请联系 supportoschina.cn 删除。 本文参与“OSC源创计划”欢迎正在阅读的你也加入一起分享。