shell快讲第一节--shell基础
shell快讲第二节--管道与重定向
shell快讲第三节--正则表达式
shell快讲第四节--sed与awk
shell快讲第五节--shell语法基础
shell快讲第六节--shell函数编程
shell快讲第七节--shell编程规范与调试
shell快讲第八节--shell编程实战
正则表达式
简介
正则表达式在所有的开发语言中都存在,在shell中也是非常频繁使用,常见的命令工具有grep、sed、awk等。因此不理解正则表达式就无法写出好用的脚本,甚至很多命令的使用也将存在问题,正则表达式随着版本和语言的不同,语法存在的略微不同,这里我们不讨论太深的用法,仅仅强调常见的用法,正则表达式即是为了从一组数据中按照一定规则过滤出匹配的数据:
1-04-01.png
正则表达式基础
正则表达式有很多的元字符,下面列下常见的元字符,元字符很多,组合也很复杂,一般情况下我们只需要知道简单使用即可,复杂的正则表达式一般可以去专门的网站进行测试和搜索
元字符 | 描述 | 元字符 | 描述 |
---|---|---|---|
. | 匹配任意单个字符^ | ? | 匹配其前面的字符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,不支持正则表达,按照字符串字面意思进行匹配
正则掌握到这里一般就足够使用了,这里给了一些常见的使用命令常见场景,大家也可以去看下传送门
总结:
shell的正则我觉得没有学会一说,也很难短时间学的通透,建议学会基本的使用方法(但一定要会),实际工作场景中多利用搜索引擎,一个好的正则可以提高脚本运行效率并降低误匹配
网友评论