Shell正则表达式

正则表达式--通常用于判断语句中,用来检查某一字符串是否满足某一格式

正则表达式是由普通字符与元字符组成

普通字符包括大小写字母、数字、标点符号及一些其他符号

元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

 
 

基础正则表达式常见元字符: (支持的工具: grep, egrep, sed, awk)

注: egrep, awk使用(n}、{n,}、(n,m}匹配时"{}"前不用加"\"

\ 转义字符,用于取消特殊符号的含义 例: \!、\n、\s等
^ 匹配字符串开始的位置 例: ^a、^the、^#、^[a-z]
$ 匹配字符串结束的位置 例: word$、^$匹配空行
. 匹配除\n之外的任意的一个字符 例: go.d、g..d
* 匹配前面子表达式0次或者多次 例: goo*d、go.*d
[list] 匹配list列表中的一个字符 例: go[ola]d, [abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字
[^list] 匹配任意非list列表中的一个字符 例: [^0-9]、[^A-Z0-9]、[^a-z]匹配任意一位非小写字母
\{n\} 匹配前面的子表达式n次 例: go\{2\}d. ‘[0-9]\{2\}‘匹配两位数字
\{n,\} 匹配前面的子表达式不少于n次 例: go\{2,\}d, ‘[0-9]\{2,\}‘匹配两位及两位以上数字
\{n,m\} 匹配前面的子表达式n到m次 例: go\{2,3\}d. ‘[0-9]\{2,3\}‘匹配两位到三位数字

扩展正则表达式元字符: (支持的工具: egrep,awk)

+ 匹配前面子表达式1次以上 例: go+d,将匹配至少一个o,如god, good, goood等
? 匹配前面子表达式0次或者1次 例: go?d,将匹配gd或god
() 将括号中的字符串作为一个整体 例: g(oo) +d,将匹配oo整体1次以上,如good, gooood等
| 以或的方式匹配字条串 例: g(oo|la)d,将匹配good或者glad
 

 

正则表达式匹配E-mail地址

用户名@: ^ ( [a-zA-Z0-9_\-\.\+]+) @
子域名: ([a-ZA-Z0-9_\-\.]+)
*域名(字符串长度一般在2到5): \.([a-ZA-z]{2,5})$
 
egrep ‘^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$‘ email.txt
awk ‘/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/(print $0}‘ email.txt
 

 

Shell正则表达式匹配IP地址

^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ 

 

案例:

写个shell脚本,要求ping一批服务器,每台服务器ping5个包,取出时延>=50ms或丢包的服务器

#!/bin/bash

for ip in `cat ip.txt`
do
  count=$(ping -c 5 -i 2.5 -w 3 $ip | grep icmp_seq | wc -l)
  delay=$(ping -c 5 -i 0.5 -w 3 $ip | grep from |cut -d = -f4 |cut -d . -f1)

  if [ $count -lt 5 ];then
    echo "$ip packet lost" >> /opt/test.txt
  fi

    for i in $delay
    do
      if [ $i -ge 50 ];then
        echo "$ip delay" >> /opt/test.txt
        break
      fi
    done
done

 

写个shell脚本实现把点分十进制的IP地址,转换成点分二进制

#!/bin/bash

switch() {
ip=$1
num=$(echo $ip | tr .  )
for a in $num
do
  i=256
  for b in {1..8}
  do
    i=$[$i/2]
    A=$[$a-$i]
    if [ $A -lt 0 ];then
      echo -n 0
    else
      echo -n 1
      a=$[$a-$i]
    fi
  done
  echo -n .
done
}
IP=$1
res=$(switch $IP)
echo ${res%.*}

 

Shell正则表达式

上一篇:【Objective-C】Http常用API、同步请求与异步请求


下一篇:如何在CorelDRAW中使用渐变填充对象 渐变填充的操作方法和应用技巧介绍