一招掌握:Shell正则表达式轻松匹配IP地址

在Shell脚本编写和文本处理中,经常会遇到需要匹配IP地址的场景。IP地址是一个由32位二进制数字组成的地址,通常表示为四个以点分隔的十进制数。正确的IP地址格式对于网络编程、日志分析等任务至关重要。本文将介绍如何在Shell中使用正则表达式轻松匹配IP地址。
IP地址的基本结构
IP地址分为四个部分,每部分由1到3位的十进制数组成,范围从0到255。以下是IP地址的几个关键点:
每部分的最大值为255。
第一部分不能为0,除了私有IP地址中的10.X.X.X。
最后一部分不能为255,除非它是私有IP地址中的172.16.0.0/12或192.168.0.0/16的一部分。
IP地址不能以点(.)开始或结束。
正则表达式匹配IP地址
在Shell中,可以使用正则表达式来匹配IP地址。以下是一个基本的正则表达式,用于匹配有效的IP地址:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
这个正则表达式的组成部分解释如下:
^
:表示匹配字符串的开始。
(?: … )
:非捕获组,用于组合多个模式,但不保存匹配的结果。
25[0-5]
:匹配250到255之间的数字。
2[0-4][0-9]
:匹配200到249之间的数字。
[01]?[0-9][0-9]?
:匹配0到199之间的数字,
[01]?
允许0或1作为起始数字,
[0-9]?
允许一个或两个数字。
\.
:匹配点(.)字符。
{3}
:重复前面的模式三次,对应IP地址的三个点分隔的部分。
最后的
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
:匹配最后一部分的数字。
$
:表示匹配字符串的结束。
Shell脚本示例
以下是一个Shell脚本示例,使用上述正则表达式来匹配和打印有效的IP地址:
#!/bin/bash

# IP地址数组
ip_addresses=(
“192.168.1.1”
“10.0.0.1”
“172.16.0.1”
“255.255.255.255”
“999.0.0.1”
“1.0.0.500”
“a.0.0.0”
“0.b.0.0”
“1.1.1”
“2.2”
“10.0.0.0”
)

# 正则表达式
regex=’^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$’

# 遍历IP地址数组并匹配
for ip in “${ip_addresses[@]}”; do
if [[ $ip =~ $regex ]]; then
echo “$ip is a valid IP address.”
else
echo “$ip is not a valid IP address.”
fi
done
运行此脚本将输出每个IP地址是否有效。
通过掌握这个正则表达式,您可以在Shell脚本中轻松地进行IP地址的匹配和验证,这对于网络编程、日志分析和其他数据处理任务非常有用。