正则表达式通用匹配ip地址及主机检测
在使用正则表达式匹配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!
正则表达式通用匹配ip地址及主机检测的更多相关文章
- python中利用正则表达式匹配ip地址
现在有一道题目,要求利用python中re模块来匹配ip地址,我们应如何着手? 首先能想到的是ip地址是数字,正则表达式是如何匹配数字的呢? \d或[0-9] 对于这个问题,不要一下子上来就写匹配模式 ...
- Apache服务(基于IP地址,主机名,端口号)
安装Apache服务程序 需要注意apache服务程序的软件包名称叫做httpd,因此直接执行yum install apache则是错误的. [root@liuxuanke-hbza ~]# yum ...
- Java如何从IP地址查找主机名?
在Java编程中,如何从IP地址查询出主机名? 以下示例显示了如何通过net.InetAddress类的InetAddress.getByName()方法将指定的IP地址查到主机名称. package ...
- Java如何获取本地计算机的IP地址和主机名?
在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com. ...
- python匹配ip地址
ip地址是用3个'.'号作为分隔符,分割4个数字,每个数字的取值在[0,255],一般日志文件中的ip地址都是有效的ip地址,不需要我们再去验证,因此,若从日志文件中提取ip,那么可以简单写成这样: ...
- Java 实例 - 获取本机ip地址及主机名
package guyu.day0824; import java.net.InetAddress; /** * @Author: Fred * @Date: 2020/8/24 09:39 */ p ...
- [置顶] 正则表达式应用:匹配IP地址
都知道iP地址有四个数值,三个点号组成.三个数值的具体范围为0到255,为了使用正则表达式匹配就必须分析IP地址的组成 1先分析数值,2再组合数值和点号 1先分析数值 IP地址的数字范围从0到255, ...
- 使用正则表达式匹配IP地址
IP地址分为4段,以点号分隔.要对IP地址进行匹配,首先要对其进行分析,分成如下部分,分别进行匹配: 第一步:地址分析,正则初判 1.0-9 \d 进行匹配 2.10-99 [1-9]\d 进行匹 ...
- python 正则表达式匹配IP地址
一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...
随机推荐
- lifecycle-mapping-metadata.xml
<?xml version="1.0" encoding="UTF-8"?> <lifecycleMappingMetadata> &l ...
- Excel2010表格里设置每页打印时都有表头
在打印Excel表格时常常会出现如果存在多页打印时,往往从第二页开始就会出现没有表头的情况,导致到后面都不清楚对应的是哪个数据,查看时也很麻烦,下面就将为大家介绍如何在Excel表格里设置每页打印时都 ...
- Windows应用程序未响应
昨天在安装postgresql的扩展功能postgis的时候,stackbuilder刚打开就死掉,一直未响应,刚开始以为是内存的原因,后来发现并没有占用太多内存,最后打开vpn发现就可以了,原来是网 ...
- windows下显示隐藏的文件
文件--文件夹选项---查看---高级设置----隐藏文件和文件夹----显示隐藏的文件.文件夹和驱动器
- 记录一个直接操作mediawiki数据库遇到的坑
我的mediawiki使用的是postgresql数据库,当你进入到mediawiki数据库时,运行sql select * from pg_tables; 你会发现mediawiki的数据表的sch ...
- nodejs加密解密
nodejs是通集成在内核中的crypto模块来完成加密解密. 常用加密解密模块化代码: /** * Created by linli on 2015/8/25. */ var crypto = re ...
- awk 分解行、字段
1. 格式 格式: awk 'pattern {action} pattern {action}' filename 注:多个文件时,读取从左到右,读完第一个再读取第二个 pattern 1-/正则表 ...
- net 提供了Thread类用于线程的操作
net 提供了Thread类用于线程的操作. 当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程.后台线程将会随着主线程的推出而退出.后台线程不妨碍程序的 ...
- Elasticsearch支持的字段类型
es支持下列简单的字段类型: String: string Whole number: byte, short, integer, long Floating point: float, double ...
- Java hibernate 遇到的问题:could not read a hi value
问题: 解决办法:在网上看到一篇文章说是把数据库实体类的注解@GeneratedValue改成@GeneratedValue(strategy = GenerationType.IDENTITY) , ...