LINUX SHELL编程从初学到精通(第三章 正则表达式)
来源:互联网 发布:复共轭矩阵与厄米矩阵 编辑:程序博客网 时间:2024/04/30 13:41
3.1正则表达式基础
1.“*”符号
“*”符号用于匹配前面一个普通字符的0次或多次重复,如:
hel*o,“*”符号前面的普通字符是l,*字符就表示匹配l字符0次或多次,如字符串helo,hello,hellllo都可以由hel*o表示。
2.“.”符号
点号“.”用于匹配任意一个字符。如:
...73.,由于“.”符号只能匹配一个字符,因此,上述字符串表示前面三个字符为任意字符,第4和第5个字符是7和3,最后一个字符为任意字符,如xcb738、49j73U都能匹配上述字符串。值得注意的是,“.”符号可以匹配一个空格。
3.“^”符号
“^”符号用于匹配行首,表示行首的字符是“^”字符后面的那个字符,如:
^cloud,这表示匹配以cloud开头的行。结合上面介绍的“*”符号和“.”符号,再举一个例:
^...X86*,该字符串表示行首的三个字符为任意字符(可以是空格),第4~6个字符为X86,第7个字符开始可以重复匹配6,如:866X866666、8a6X86都可以匹配上述字符。
4.“$”符号
$符号匹配行尾,$符号放在匹配字符之后,与“^”符号的功能和用法都相反,如:
micky$,该正则表达式表示匹配以micky结尾的所有行。一个特殊的正则表达式是匹配所有空行的表达式,为:^$。该正则表达式即匹配行首,又匹配行尾,中间没有任何字符,因此,为空行。很多命令都用到这个正则表达式来表示空行。
如需要匹配只包含一个字符的行,如:^.$
5.“[ ]”符号
方括号[]匹配字符集合,该符号支持穷举方法列出字符集合的所有元素,也支持使用“-”符号表示字符集合范围,表明字符集合范围从“-”左边字符开始,到“-”右边字符结束。如果要匹配任意一个数字,可以使用下面2种方法:
[0123456789]
[0-9]
我们知道,“^”符号表示匹配行首,但是“^”符号放到“[]”符号中就不在表示匹配行首了,而是表示取反符号。
[^b-d]:表示匹配不在b-d范围之类的所有字符。此时,符号“^”不再匹配行首,而是取反符号,不再b-d范围的字符实际上涵盖了除了小写字母b、c和d之外的所有字符(包含其他字母、数字、空格等)。
3.2正则表达式的扩展
1.“?”符号
匹配“?”符号之前的那个字符0次或1次,如:
JO?B,即匹配JOB或者JOOB。“?”字符至多可以匹配1个字符。
2.“+”符号
与“*”符号类似,都是匹配其前面那个字符多次,但是,“*”符号可以匹配0次,而“+”符号至少匹配1次。如:
S+EU表达式匹配S1次或任意次,SSEU或SSSSEU等。
3.“()”符号和“|”符号
“()”符号通常与“|”符号结合使用,表示一组可选字符的集合,如:
re(a|e|o)d该表达式中的(a|e|o)表示在字符a、e和o中选择任意一个字符,即read、reed和reod都可由该表达式进行匹配。事实上,()符号很少使用到,因为“[]”符号完全能够替代“()”符号表示一组可选字符集合,re(a|e|o)d就等价于re[aeo]d。
3.3通配
bash Shell本身不支持正则表达式,使用正则表达式的是Shell命令和工具。这些元字符在通配中的意义与正则表达式中的意义不完全一致,*符号不在表示其前面字符的重复,而是表示任意位的任意字符,?字符表示一个任意字符,^符号在通配中不代表行首,而是代表取反。
如我们需要列出a~h范围内以字母开头并以.awk结尾的文件,我们可以使用:ls -l [a-h]*.awk来匹配这些文件。
如果我们要列出a~h范围内以字母开头且句点后不是以.awk结尾的文件,可以使用[a-h]*.[^awk]*来匹配这些文件。
3.4 grep命令
grep命令的模式十分灵活,可以是字符串,也可以是变量,还可以是正则表达式。需要说明的是,无论模式是何种形式,只要模式中包含空格,就需要使用双引号将模式引起来,如果不加双引号,空格后的单词容易被误认为是文件名,如普通的“hello world”,grep hello world命令就将world认为是文件名。因此,grep "hello world" filename 才是正确的写法。
grep certificate 00.pem命令,首先搜索00.pem文件中包含certificate字符串的行,由于模式certificate中不包含空格,因此,是否用引号引起模式对grep命令不产生影响。
grep "user certificate" 00.pem命令,当我们要搜索00.pem文件中包含user certificate字符串的行时,不用双引号将user certificate括起来时,shell提示没有certificate这个文件或目录,然后给出00.pem文件中包含user字符串的行。而当我们用双引号将user certificate括起来后,就得到了正确答案。
- LINUX SHELL编程从初学到精通(第三章 正则表达式)
- Linux Shell编程从初学到精通
- 《linux shell编程从初学到精通》——grep
- 《Linux Shell编程 从初学到精通》 学习笔记
- LINUX SHELL编程从初学到精通(第二章 Linux文件系统和文本编辑器)(上)
- LINUX SHELL编程从初学到精通(第二章 Linux文件系统和文本编辑器)(下)
- Linux Shell编程 从初学到精通 习题答案 课后题答案(第八章)
- LINUX SHELL编程从初学到精通(第一章 Shell脚本编程概述)
- Linux C编程从初学到精通
- 《Linux Shell编程从初学到精通(第2版)》pdf
- LINUX SHELL编程从初学到精通 高清完整 .pdf版
- Linux从初学到精通
- Android多媒体编程从初学到精通
- Android多媒体编程从初学到精通
- Linux指令从初学到精通
- Ubuntu Linux从初学到精通
- 正则表达式从入门到精通
- 正则表达式从入门到精通
- 大三第九个星期
- String.Format in JavaScript
- 临时表
- TortoiseSVN解决冲突
- oracle数据库中where条件后各个条件的优先级,比如order by, group by,having之类
- LINUX SHELL编程从初学到精通(第三章 正则表达式)
- Oracle创建自增字段
- Hibernate与 MyBatis的比较
- UvaLA 3029 最大子矩阵问题
- 原生JS实现瀑布流及加载效果
- 【Leetcode】Jump Game II (DP)
- 光棍节,UI学科带你装逼带你飞!
- android自定义广播实现app完全退出
- 【Unity3D自学记录】Unity3D显示NPC名称