正则表达式通用匹配ip地址及主机检测
2024-09-06 13:52:13
在使用正则表达式匹配ip地址时如果不限定ip正确格式,一些场景下可能会产生不一样的结果,比如ip数值超范围,ip段超范围等,在使用正则表达式匹配ip地址时要注意几点:
1,字符界定:使用 \<匹配 字符 \> 或 \b 匹配字符 \b ;这个作用是限定ip的长度或位数
2. 数值范围匹配 :[0-9] ,使用分组的方式,匹配字段
3. ip段的划分 :按照匹配规则一个正确的ip地址可以划分为如下几个段:
0-9段,10-99段,100-199段,200-254段;
正则表达式匹配如下:
grep -o -E "\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b"
[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){3}
#这是匹配ip的第一段数值,包括 . ,这个匹配中可以匹配任意一个254以内开头的地址段,并且重复匹配三次
脚本中测试
#!/bin/bash echo "$1" | grep -o -E "\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b"
[ $? -ne ] && { echo "$1 addr error"; exit ; }
ping -c -w $ &> /dev/null && echo "$1 host is up !" || echo "$1 host is down !"
#正确测试
[root@yufu home]# ./hostping.sh 192.168.214.2
192.168.214.2
192.168.214.2 host is up ! #错误测试
[root@yufu home]# ./hostping.sh 192.442.214.666
192.442.214.666 addr error
这个匹配方式在centos6和centos7中通用,还有一种简单粗暴的方法匹配ip,但不是非常精确,可能会匹配到其他内容:
[root@yufu home]# ifconfig | egrep -o "[0-9.]{7,}"
192.168.214.187
192.168.214.255
255.255.255.0
#匹配后的ip地址默认都在第一行,可以head指令截取
127.0.0.1
255.0.0.0
因此可以在此基础上再写一个可以实现自定检测ipd端和检查输入的正确性的主机检测脚本;
#!/bin/bash trap "exit" read -p "Input addr eg: 192.168.214 : " IP echo "$IP" | grep -o -E "\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b"
[ $? -eq ] || { echo "$IP addr error" ; exit ; } Ipaddr=$IP for Host in $(seq )
do
ping -c -w $IP.$Host &>/dev/null
if [ $? -eq ];then
echo -e "\033[32;1m$IP.$Host is up! \033[0m"
else
echo -e "\033[;31m$IP.$Host is down!\033[0m"
fi
done
检测测试
[root@yufu home]# ./hostping.sh
Input addr eg: 192.168. : 172.16.
172.16.
172.16.0.1 is up!
172.16.0.2 is down!
172.16.0.3 is down!
172.16.0.4 is down!
172.16.0.5 is down!
172.16.0.6 is down!
172.16.0.7 is down!
172.16.0.8 is down!
172.16.0.9 is down!
172.16.0.10 is down!
172.16.0.11 is down!
172.16.0.12 is down!
172.16.0.13 is down!
172.16.0.14 is down!
172.16.0.15 is down!
172.16.0.16 is down!
172.16.0.17 is down!
172.16.0.18 is down!
172.16.0.19 is down!
172.16.0.20 is down!
172.16.0.21 is down!
最新文章
- 理解RESTful
- 使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据
- DDD领域驱动设计基本理论知识总结
- django开发个人简易Blog——构建项目结构
- linux gcc头文件搜索路径
- ios-遍历和排序
- 学习笔记--Grunt、安装、图文详解
- 【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”
- QT 自定义assert
- python手记(31)
- 基于google earth engine 云计算平台的全国水体变化研究
- JS 正则表达式否定匹配(正向前瞻)
- Android笔记: 在Eclipse环境下使用Genymotion模拟器
- 从无到有<;前端异常监控系统>;落地
- Python内置进制转换函数(实现16进制和ASCII转换)
- 网页块元素定位建议使用的xpath方式
- C++ Const指针
- HTML5入门教程:响应式页面布局
- php 对数组按照字符串长度排序
- 关于pyquery小知识点