第四节 正则表达式

第四节 正则表达式

简介

正则表达式在所有的开发语言中都存在,在shell中也是非常频繁使用,常见的命令工具有grep、sed、awk等。因此不理解正则表达式就无法写出好用的脚本,甚至很多命令的使用也将存在问题,正则表达式随着版本和语言的不同,语法存在的略微不同,这里我们不讨论太深的用法,仅仅强调常见的用法,正则表达式即是为了从一组数据中按照一定规则过滤出匹配的数据:

在这里插入图片描述

正则表达式基础

正则表达式有很多的元字符,下面列下常见的元字符,元字符很多,组合也很复杂,一般情况下我们只需要知道简单使用即可,复杂的正则表达式一般可以去专门的网站进行测试和搜索

元字符描述元字符描述
.匹配任意单个字符^?匹配其前面的字符1次或0次
*匹配其前面的字符任意次\{m,n\}匹配其前面的字符至少m次至多n次
.*任意长度的任意字符^行首匹配
[]匹配制定范围内的任意单个字符$行尾匹配
[^]匹配指定范围外的任意单个字符\转义符号,屏蔽一个元字符的特殊意义
+匹配1个或多个前面的字符|表示“或”,匹配一组可选字符

正则表达的一些用法

除了grep,sed,awk。bash shell本身不支持正则表达式,但是支持通配符,我们权当最简单的正则表达式吧,借以理解下正则

>>> ls -l *.md #显示md结尾的文件,*号匹配任意多字符
>>> ls -l 1-0?.md#显示1-0x.md,?符号匹配任意一个字符
>>> ls -l 1-0[1-2]*.md #读者自己猜猜这是匹配什么
grep命令

下面开始正式介绍正则表达,那么不得不提的就是Linux的命令三剑客,这三个命令其实复杂的都可以单独写一本书,当然对我们来说也是没有必要的,我们作为日常使用,只需要记住基本的用法,需要复杂使用的时候,我们只需要去百度即可。下面先简单看下grep的选项,大家要注意grep选项不是正则元字符,不要搞混

选项意愿选项意义
-c只输出匹配行的数量-i搜索时忽略大小写
-h查询多文件时不显示文件名-l只列出符合匹配的文件名
-n列出所有的匹配行,并显示行号-s不显示不能存在或无匹配的错误信息
-v显示不包括匹配文本的所有行-w匹配整词
-x匹配整行-r递归搜索
-q不输出结果,以退出状态表示搜索是否成功-E支持扩展正则表达式
-F不支持正则表达式,按照字符串字面意思匹配-b打印匹配行距离文件头偏移量

选项用法举例:

>>> echo "this is a world" |grep world #匹配world这几个字符
>>> grep 'shell' test.txt #匹配testfile中的shell几个字符
>>> grep -i 'shell' test.txt #不区分大小写的匹配
>>> grep -n 'shell' test.txt #带行号显示
>>> grep -c 'shell' test.txt #统计匹配的行的数量
>>> grep -v 'shell' test.txt #显示不匹配'shell'的行
>>> ... 

正则用法举例:

>>> grep '[0-9]' test.txt #匹配0-9的数据的行
>>> grep '[a-z][0-9]' test.txt #匹配小写字母开头,第二是数字的行
>>> grep '^r.*n$' test.txt #匹配r开头,n结尾,“.*”代表任意多
>>> cat /etc/passwd |grep '^\(root\|zhang\)'

egrep

egrep=grep -E 其实就是grep的扩展正则模式

fgrep

快速grep命令,类似grep -F,不支持正则表达,按照字符串字面意思进行匹配

正则掌握到这里一般就足够使用了,这里给了一些常见的使用命令常见场景,大家也可以去看下传送门

课后练习

1、请描述如下正则表达式的含义:

a:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

b:“[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

2、请按照自己的理解编写一个IP的正则表达式

注释:高级的正则表达式编写本身就就是一门学问,千万不要望而却步,我们大多数ctrl+c,ctrl+v就够

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫慌搞安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值