1 正则表达式
1.1 进阶知识
1.1.1 扩展符号
基础知识
简介
字母模式匹配
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
数字模式匹配
[:digit:] 十进制数字
[:xdigit:]十六进制数字
符号模式匹配
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
注意:
在使用该模式匹配的时候,一般用[[ ]],
- 第一个中括号是匹配符[] 匹配中括号中的任意一个字符
- 第二个[]是格式 如[:digit:]
属性模式匹配
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\r\t\v]。
\S 匹配任何非空白字符。等价于 [^\f\r\t\v]
\w 匹配一个字母,数字,下划线,汉字,其它国家文字的字符,等价于[_[:alnum:]字]
\W 匹配一个非字母,数字,下划线,汉字,其它国家文字的字符,等价于[^_[:alnum:]字]
简单实践
准备文件
[root@localhost ~]# cat file1.txt
acd
abc
a_c
aZc
aZd
a c
a3c
精确匹配实践
以a开头c结尾 中间a-zA-Z0-9任意字符 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:alnum:]]c$" file1.txt
abc
aZc
a3c
以a开头c结尾 中间是a-zA-Z任意字符 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:alpha:]]c$" file1.txt
abc
aZc
以a开头c结尾 中间是0-9任意字符 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:digit:]]c$" file1.txt
a3c
以a开头c结尾 中间是a-z任意字符 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:lower:]]c$" file1.txt
abc
以a开头c结尾 中间是A-Z任意字符 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:upper:]]c$" file1.txt
aZc
以a开头c结尾 中间是可打印符号 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:print:]]c$" file1.txt
abc
a_c
aZc
a c
a3c
以a开头c结尾 中间是符号字符 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:punct:]]c$" file1.txt
a_c
以a开头c结尾 中间是空格或者TAB符字符 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:blank:]]c$" file1.txt
a c
[root@localhost ~]# egrep "^a[[:space:]]c$" file1.txt
a c
以a开头c结尾 中间是十六进制字符 长度为三个字节的字符串
[root@localhost ~]# egrep "^a[[:xdigit:]]c$" file1.txt
abc
a3c
1.1.2 目标检测
基础知识
需求
定制站点或目标主机的检测平台,在对站点域名和主机ip检测之前,判断输入的语法是否正确。
ip检测
定制ip地址文件
[root@localhost ~]# cat testip.txt
112.456.44.55
256.18.56.1
10.0.0.12
匹配ip地址
[root@localhost ~]# egrep '(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([0-9]{1,2}|1[1-9]{2}|2[0-5][0-9]|25[0-4])$' testip.txt
10.0.0.12
网址检测
定制ip地址文件
[root@localhost ~]# cat testsite.txt
http://www.baidu.com
www.126.com
163.com
http.example.comcom
匹配ip地址
[root@localhost ~]# egrep '((http|https|ftp):\/\/)?(www\.)?([0-Z]+\.)([a-Z]{2,5})$' testsite.txt
http://www.baidu.com
www.126.com
163.com
简单实践
脚本内容
查看脚本内容
[root@localhost ~]# cat target_check.sh
#!/bin/bash
# 功能:定制主机存活的检测功能
# 版本:v0.1
# 作者:书记
# 联系:www.superopsmsb.com
# 定制目标类型变量
target_type=(主机 网站)
# 定制检测ip地址格式的函数
check_ip(){
# 接收函数参数
IP=$1
ip_regex='(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([0-9]{1,2}|1[1-9]{2}|2[0-5][0-9]|25[0-4])$'
# 判断ip地址是否有效
echo $IP | egrep "${ip_regex}" >/dev/null && echo "true" || echo "false"
}
# 定制网址的格式检测函数
check_url(){
# 接收函数参数
site=$1
site_regex='((http|https|ftp):\/\/)?(www\.)?([0-Z]+\.)([a-Z]{2,5})$'
# 判断网址地址是否有效
echo $site | egrep "${site_regex}" >/dev/null && echo "true" || echo "false"
}
# 定制服务的操作提示功能函数
menu(){
echo -e "\e[31m---------------确定检测目标类型---------------"
echo -e " 1: 主机 2: 网站"
echo -e "-------------------------------------------\033[0m"
}
# 目标主机检测过程
host_ip_check(){
read -p "> 请输入要检测的主机ip: " ip_addr
result=$(check_ip ${
ip_addr})
if [ ${
result} == "true" ];then
ping -c1 -W1 ${
ip_addr} &> /dev/null && echo "${ip_addr} 状态正常" || echo "${ip_addr} 状态不可达"
else
echo "目标ip格式异常"
fi
}
# 目标站点检测过程
net_site_check(){
read -p "> 请输入要检测的网站地址: " site_addr
result=$(check_url ${
site_addr})
if [ ${
result} == "true" ];then
curl -s -o /dev/null ${
site_addr} && echo "${site_addr} 状态正常" || echo "${site_addr} 状态异常"
else
echo "目标网址格式异常"
fi
}
# 定制帮助信息
Usage(){
echo "请输入正确的检测目标类型"
}
# 定制业务逻辑
while true
do
menu
read -p "> 请输入要检测的目标类型: " target_id
if [ ${
target_type[$target_id-1]} == "主机" ];then
host_ip_check
elif [ ${
target_type[$target_id-1]} == "网站" ];then
net_site_check
else
Usage
fi
done
脚本执行效果
[root@localhost ~]# /bin/bash target_check.sh
---------------确定检测目标类型---------------
1: 主机 2: 网站
-------------------------------------------
> 请输入要检测的目标类型: 1
> 请输入要检测的主机ip: 1aaa
目标ip格式异常
---------------确定检测目标类型---------------
1: 主机 2: 网站
-------------------------------------------
> 请输入要检测的目标类型: 1
> 请输入要检测的主机ip: 10.0.0.12
10.0.0