在使用正则表达式匹配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地址及主机检测的更多相关文章

  1. python中利用正则表达式匹配ip地址

    现在有一道题目,要求利用python中re模块来匹配ip地址,我们应如何着手? 首先能想到的是ip地址是数字,正则表达式是如何匹配数字的呢? \d或[0-9] 对于这个问题,不要一下子上来就写匹配模式 ...

  2. Apache服务(基于IP地址,主机名,端口号)

    安装Apache服务程序 需要注意apache服务程序的软件包名称叫做httpd,因此直接执行yum install apache则是错误的. [root@liuxuanke-hbza ~]# yum ...

  3. Java如何从IP地址查找主机名?

    在Java编程中,如何从IP地址查询出主机名? 以下示例显示了如何通过net.InetAddress类的InetAddress.getByName()方法将指定的IP地址查到主机名称. package ...

  4. Java如何获取本地计算机的IP地址和主机名?

    在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com. ...

  5. python匹配ip地址

    ip地址是用3个'.'号作为分隔符,分割4个数字,每个数字的取值在[0,255],一般日志文件中的ip地址都是有效的ip地址,不需要我们再去验证,因此,若从日志文件中提取ip,那么可以简单写成这样: ...

  6. Java 实例 - 获取本机ip地址及主机名

    package guyu.day0824; import java.net.InetAddress; /** * @Author: Fred * @Date: 2020/8/24 09:39 */ p ...

  7. [置顶] 正则表达式应用:匹配IP地址

    都知道iP地址有四个数值,三个点号组成.三个数值的具体范围为0到255,为了使用正则表达式匹配就必须分析IP地址的组成 1先分析数值,2再组合数值和点号 1先分析数值 IP地址的数字范围从0到255, ...

  8. 使用正则表达式匹配IP地址

    IP地址分为4段,以点号分隔.要对IP地址进行匹配,首先要对其进行分析,分成如下部分,分别进行匹配:   第一步:地址分析,正则初判 1.0-9 \d 进行匹配 2.10-99 [1-9]\d 进行匹 ...

  9. python 正则表达式匹配IP地址

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...

随机推荐

  1. Hive MetaStore Upgrade

    # cd $HIVE_HOME/scripts/metastore/upgrade/mysql [Dev root @ sd-9c1f-2eac /usr/local/src/apache-hive- ...

  2. HDU 5877 Weak Pair DFS + 树状数组 + 其实不用离散化

    http://acm.hdu.edu.cn/listproblem.php?vol=49 给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] <= k.则 ...

  3. 服务器部署nginx报错 nginx: [warn] conflicting server name "localhost" on xxx.xxx.xxx.xxx:80, ignored

    问题 修改nginx配置参数后,使用nginx -t检查配置. 提示successfull后就可以使用 nginx -s reload来重新加载配置 我配置的过程中遇到这样的问题,就是绑定了主机名后, ...

  4. JQury各种ajax函数

    $.get(url,[data],[callback],[type]) 说明:以get方式发送请求,url为请求地址,data为请求数据的列表,callback为请求成功后的回调函数,该函数接受两个参 ...

  5. 让我们把KBEngine玩坏吧!如何定制我们自己的C++函数(一)

    为什么不更新kbe warring的代码解读了,因为在我看来那个demo讲完了实体就没东西可讲了,如果专心的看官方文档和PPT的话demo的代码后面没任何难点了已经,单纯的复制黏贴代码实在太过无聊.程 ...

  6. Android各大手机系统打开权限管理页面

    最近项目上比较忙,终于有空闲时间写写东西了. 相信做过Android的都知道,现在的手机系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框. 而且用户一旦不小心点了拒绝,下次就不再 ...

  7. Android 环信 调用相机崩掉 mikdir()

    protected void selectPicFromCamera() { if (!EaseCommonUtils.isSdcardExist()) { Toast.makeText(getAct ...

  8. django Q条件

    #q条件from django.db.models import Qq = Q(name__startswith="p") | Q(name__startswith="l ...

  9. LeetCode Minimum Depth of Binary Tree 找最小深度(返回最小深度)

    题意:找到离根结点最近的叶子结点的那一层(设同一层上的结点与根结点的距离相等),返回它所在的层数. 方法有: 1.递归深度搜索 2.层次搜索 方法一:递归(无优化) /** * Definition ...

  10. HDU1664 BFS + 数论 + 剪枝

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1664 , 一道比较蛋疼的搜索题. 这道题有很多坑点,一点处理不好就要TLE. 题意很简单,就是找到一个 ...