【Linux学习笔记九】Shell编程-正则表达式
来源:互联网 发布:中核原子能公司 知乎 编辑:程序博客网 时间:2024/05/01 08:00
【注】文章中的所有截图均为centos下实验结果,亲测命令正确= ̄ω ̄=
【参考资料】《Linux从入门到精通(第2版)》刘忆智 等编著
1、定义 :模式,对正在查找的文本的描述
POSIX库和PCRE均可以用于正则表达式编程。前者是Linux自带库,后者为Perl的库,功能更强大一些,也更难掌握。
2、字符集和单词
首先安装一下words:sudo yum install words 存在于 /usr/share/dict/words
“.”用于匹配换行符以外的任意一个字符。
.at ##匹配诸如cat、sat、bat、#at、~at的字符串
[a-z]at ##限定at之前只能是小写字符
“[ ]”用于指定一个字符集,但只匹配其中的一个字符。
[abc] ##只能匹配a或b或c中的一个字符
“-”用于描述一个范围。
[a-zA-Z] ##能够匹配所有的英文字符
[0-9] ##匹配所有的一位数字
$ egrep '[a-z]at' /usr/share/dict/words ##查找具有“一个字符+at”形式的单词
$ egrep '\<[a-z]at\>' /usr/share/dict/words ##为了让其可以严格匹配一个单词,需要加上“\<”和“\>”
但是仍会出现有多余字符的字符串被匹配(如上图),这是由于正则表达式中“单词”指的是两侧由非单词字符分割的字符串。
【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51346603】
3、字符类
$ egrep "^[[:upper:]]t$" words ##找出所有以大写字母开头(^)和以t结尾($)的行
[[:upper:]]就是一个字符类,表示所有的大写字母,等价于[A-Z]。下边列出完整的字符串类
类匹配字符 [[:alnum:]]
文字、数字字符 [[:alpha:]]
字母字符 [[:lower:]]
小写字母 [[:upper:]]
大写字母 [[:digit:]]
小数 [[:xdigit:]]
十六进制数字 [[:punct:]]
标点符号 [[:blank:]]
制表符和空格 [[:space:]]
空格 [[:cntrl:]]
所有控制符 [[:print:]]
所有可打印的字符 [[:graph:]]
除空格外所有可打印的字符
文字、数字字符 [[:alpha:]]
字母字符 [[:lower:]]
小写字母 [[:upper:]]
大写字母 [[:digit:]]
小数 [[:xdigit:]]
十六进制数字 [[:punct:]]
标点符号 [[:blank:]]
制表符和空格 [[:space:]]
空格 [[:cntrl:]]
所有控制符 [[:print:]]
所有可打印的字符 [[:graph:]]
除空格外所有可打印的字符
4、位置匹配
字符“^”和“$”分别用于匹配行首和行尾。“^$”可以匹配空行,“$^”不会报错,但不会输出任何东西。
^a[a-z]t$ ##a开头,t结尾,中间含有一个小写字母的行。
^[0-9] ##以数字开头的行
5、字符转义
元字符“.”、“[”等不能直接匹配,需要用“\”取消元字符的特殊含义。
www\.google\.cn ##匹配 www.google.cn
【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51346603】
6、重复
“*”表示前边的模式重复0次或多次。
“+”表示前边的模式重复1次或多次。
“?”表示前边的模式重复0次或1次。
“{ }”指定前边模式的重复次数。
^a.*t$ ##a开头t结尾的行
\<hi\>.+\<Jerry\> ##单词hi后边隔了一个或几个字符后出现单词Jerry的行
\<[1-9][0-9]{7,}\> ##以数字1-9中的一个开始,第二位开始是0-9中的一个,从第二位开始重复至少7次(即代表超过七位的数的字符串)
元字符
描述
*
重复0次或多次
+
重复一次或多次
?
重复0次或一次
{n}
重复n次
{n,}
重复n次或更多次
{n,m}
重复不少于n次,不多于m次
描述
*
重复0次或多次
+
重复一次或多次
?
重复0次或一次
{n}
重复n次
{n,}
重复n次或更多次
{n,m}
重复不少于n次,不多于m次
7、子表达式
有时需要将多个字符构成的模式用括号括起来。
$ egrep "(or){2,}" words ##or重复2次或多次的行
$ egrep "or{2,}" words ##o后边跟着2个r或更多r的行
8、反义
“[^y]”表示除了这个字符(这里是y),注意区分表示行首的情况。
[^y] ##除了字母y
[^aeiou] ##除了字母a、e、i、o、u的所有字符
^[^y] ##不以字母y开头的行
【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51346603】
9、分支
前边介绍过的正则表达式,简单地执行“与”的组合,如:
^ht$ ##表示以h开头,并且以t结尾的行
若想表达“或”的意思,需要“|”。
^h|t$ ##表示以h开头,或者以t结尾的行
10、逆向引用
可以用“\”加上子表达式编号表示再次使用该子表达式匹配到的模式。子表达式编号根据出现的顺序从左至右。
(\<.*\>).?( )*\1 ##分解介绍如下
① (\<.*\>) 表示任意长度的单词,编号为1的子表达式。
② .? 0个或1个标点(因为前边匹配任意长度的单词,此处只能匹配到标点)。
③ ( )* 0个或多个空格,编号为2的子表达式。
④ \1 第一个子表达式匹配到的模式再次出现。
【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51346603】
1 0
- 【Linux学习笔记九】Shell编程-正则表达式
- Linux shell编程学习笔记(六) 正则表达式
- Linux学习笔记(九)正则表达式
- Shell编程(正则表达式)学习笔记
- linux shell学习笔记--正则表达式
- shell编程笔记-正则表达式
- Linux Shell编程-正则表达式
- linux shell 编程笔记 getopts sed 正则表达式 shift
- shell脚本编程学习笔记(2)正则表达式
- shell编程学习笔记之正则表达式初识
- Linux学习---shell编程(05-通配符,正则表达式)
- Linux shell编程学习笔记(九) 流编辑
- Linux Shell学习笔记九
- Linux shell编程 6 ---- 正则表达式
- linux系统之shell编程-正则表达式
- Linux shell编程 基础正则表达式
- Linux基础知识---Shell编程之正则表达式
- Shell编程学习---第七篇:正则表达式
- iOS学习笔记之四--UIView的常见属性
- ViewPager 详解(一)---基本入门
- 转载---一致性算法Paxos详解
- 怎么遍历jsonarray
- LintCode: 矩阵归零
- 【Linux学习笔记九】Shell编程-正则表达式
- 高精度除法(大数相除)
- C++编译链接
- 网络编程知识(8)--使用Nginx搭建WEB服务器
- 派生类对象初始化构造过程顺序
- easyui的treegrid,只能出来父节点,子节点出不来
- CentOS上hadoop伪分布式配置
- java的UDP协议通讯的客户端
- MFC应用程序中处理消息的顺序以及对话框关闭步骤