shell脚本之正则表达式

内容预知

1.正则表达式的介绍

 1.1 正则表达式的组成

1.2正则表达式和通配符的区别

 2.基础正则表达式

2.1 转义字符的运用

 2.1.1 将特殊含义的字符转换为普通字符的含义

2.1.2 将普通字符转换为特殊作用的字符 

 2.2  基础正则表达式实际应用

2.2.1 查看以xxx为开头  和查看以xxx为结尾的文件内容

 2.2.2 匹配单个任意字符或者多个任意字符

2.2.3  匹配列表内容和匹配非列表中的内容

2.2.4 对子表达式进行多次或者限定次数的匹配 

 3.拓展正则表达式

3.1 拓展正则表达式的基本用法 

 3.2 拓展正则表达式的实际运用

 4.正则表达式的组合筛查运用

 4.1 按要求匹配输出规定的电话号码

4.2按照要求匹配出规定格式的邮箱

 总结


 

1.正则表达式的介绍

 1.1 正则表达式的组成

 

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

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

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

1.2正则表达式和通配符的区别

 

 通配符:在Linux中,一般配合find命令用于对文件目录,文件名的查找

 

正则表达式:匹配文件内容,用于精确筛选信息,可以配合grep,egrep,awk,sed命令进行搭配使用,查找时,也比通配符更加精确

 

 2.基础正则表达式

 适合awk,sed,grep,egrep等文本工具使用

 

元字符作用
\转义字符,用于取消特殊符号的含义
^匹配字符串开始的位置
$匹配字符串结束的位置
.匹配除\n之外的任意的单个字符
*匹配前面子表达式0次或者多次
[list]匹配list列表中的一个字符(列表中只要有一个符合即可)
[^list]匹配任意非list列表中的一个字符
\ {n\ }匹配前面的子表达式n次
\ {n,\ }匹配前面的子表达式不少于n次
\ {n,m\ }匹配前面的子表达式n到m次(m必须大于n,不然会报错)

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

 

2.1 转义字符的运用

 2.1.1 将特殊含义的字符转换为普通字符的含义

被转义的特殊字符转义前的含义作用
\ =具有赋值的作用,或则进行字符判断
\ !有取反的作用(除了。。。。)
\ &单个&符可以将命令挂在后台上,两个是逻辑符号且的作用
\ $取值变量的作用

2.1.2 将普通字符转换为特殊作用的字符 

 

被赋予新含义的普通字符现在拥有的作用
\n拥有换行的作用
\t转化为制表符(能让输出结果呈现表格的格式)
\w(小写)匹配包括下划线的任何单词字符
\W(大写)匹配任何非单词字符。等通于"[^A-Za-z0-9_]"
\r转换后是回车符
\d匹配一个数字字符
\D匹配一个非数字字符。等价于[^0-9]
\s(小写)空白符
\S(大写)非空白符

 2.2  基础正则表达式实际应用

2.2.1 查看以xxx为开头  和查看以xxx为结尾的文件内容

 

[root@localhost tr]#grep '^1' math.txt


[root@localhost tr]#grep '3$' math.txt 

 2.2.2 匹配单个任意字符或者多个任意字符

 

[root@localhost tr]#grep 'g.d' english.txt 


[root@localhost tr]#grep 'g.*d' english.txt 

 

 

2.2.3  匹配列表内容和匹配非列表中的内容

 

[root@localhost tr]#head -n10 /etc/passwd |grep '[root]'


[root@localhost tr]#head -n10 /etc/passwd |grep '[^root]'

 

 

2.2.4 对子表达式进行多次或者限定次数的匹配 

 

[root@localhost tr]#grep "go\{1\}" english.txt 



[root@localhost tr]#egrep "go{2,}"  english.txt 




[root@localhost tr]#egrep "go{5,8}"  english.txt 

 

 

 3.拓展正则表达式

3.1 拓展正则表达式的基本用法 

 支持awk和egrep使用,如果grep和sed想要正常使用(grep -E  sed -r)

 

元字符作用含义
+匹配前面子表达式1次及以上
匹配前面子表达式0次或者1次
()将括号中的字符串作为一个整体
|以"或"的方式匹配字符串

 

 3.2 拓展正则表达式的实际运用

 

[root@localhost tr]#egrep 'go+d'  english.txt 

[root@localhost tr]#egrep 'go?d'  english.txt 

[root@localhost tr]#egrep '(good)'  english.txt 

[root@localhost tr]#egrep 'good|fgod'  english.txt 

 

 4.正则表达式的组合筛查运用

 4.1 按要求匹配输出规定的电话号码

 

 匹配要求:

  1. 匹配 0512 开头的区号
  2. 区号与后面的号码以"-"或则空格或则没有
  3. 电话号码要5 或者 8开头的八位数。
[root@localhost zhengze]#egrep "^(0512)[- ]?[58][0-9]{7}$" phone.txt 

 

4.2按照要求匹配出规定格式的邮箱

 

 匹配要求:

 

1.用户名@的长度为6-18位,任意大小写的英文字母,任意数字,除了@和空格以外的任意符号,

开头只能是_或者英文字母

 2.子域名(二级域):任意长度,符号只能使用"-"或者"_"或者"."

3.  .顶级域:长度位2-5,任意大小写的英文

 

[root@localhost zhengze]#egrep '^[a-zA-Z][^@ ]{5,17}@[a-zA-Z0-9\-\._]+\.[A-Za-z]{2,5}$' email.txt 

 

 

 总结

 1.grep和sed若想使用拓展正则表达式式,必须是(grep -E     sed  -r)

2.在正则表达式的组合匹配中,要注意匹配一些文本内容中的特殊字符时,先使用转义字符,将特殊字符变为普通字符

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值