【Linux学习笔记九】Shell编程-正则表达式
2016-05-10 19:54
666 查看
【注】文章中的所有截图均为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
##为了让其可以严格匹配一个单词,需要加上“\<”和“\>”
但是仍会出现有多余字符的字符串被匹配(如上图),这是由于正则表达式中“单词”指的是两侧由非单词字符分割的字符串。
【转载请注明文章出处:/article/10208619.html】
3、字符类
$ egrep "^[[:upper:]]t$" words
##找出所有以大写字母开头(^)和以t结尾($)的行
[[:upper:]]就是一个字符类,表示所有的大写字母,等价于[A-Z]。下边列出完整的字符串类
4、位置匹配
字符“^”和“$”分别用于匹配行首和行尾。“^$”可以匹配空行,“$^”不会报错,但不会输出任何东西。
^a[a-z]t$ ##a开头,t结尾,中间含有一个小写字母的行。
^[0-9] ##以数字开头的行
5、字符转义
元字符“.”、“[”等不能直接匹配,需要用“\”取消元字符的特殊含义。
www\.google\.cn
##匹配 www.google.cn
【转载请注明文章出处:/article/10208619.html】
6、重复
“*”表示前边的模式重复0次或多次。
“+”表示前边的模式重复1次或多次。
“?”表示前边的模式重复0次或1次。
“{ }”指定前边模式的重复次数。
^a.*t$ ##a开头t结尾的行
\<hi\>.+\<Jerry\>
##单词hi后边隔了一个或几个字符后出现单词Jerry的行
\<[1-9][0-9]{7,}\>
##以数字1-9中的一个开始,第二位开始是0-9中的一个,从第二位开始重复至少7次(即代表超过七位的数的字符串)
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开头的行
【转载请注明文章出处:/article/10208619.html】
9、分支
前边介绍过的正则表达式,简单地执行“与”的组合,如:
^ht$ ##表示以h开头,并且以t结尾的行
若想表达“或”的意思,需要“|”。
^h|t$ ##表示以h开头,或者以t结尾的行
10、逆向引用
可以用“\”加上子表达式编号表示再次使用该子表达式匹配到的模式。子表达式编号根据出现的顺序从左至右。
(\<.*\>).?( )*\1
##分解介绍如下
① (\<.*\>) 表示任意长度的单词,编号为1的子表达式。
② .? 0个或1个标点(因为前边匹配任意长度的单词,此处只能匹配到标点)。
③ ( )* 0个或多个空格,编号为2的子表达式。
④ \1 第一个子表达式匹配到的模式再次出现。
【转载请注明文章出处:/article/10208619.html】
【参考资料】《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
##为了让其可以严格匹配一个单词,需要加上“\<”和“\>”
但是仍会出现有多余字符的字符串被匹配(如上图),这是由于正则表达式中“单词”指的是两侧由非单词字符分割的字符串。
【转载请注明文章出处:/article/10208619.html】
3、字符类
$ egrep "^[[:upper:]]t$" words
##找出所有以大写字母开头(^)和以t结尾($)的行
[[:upper:]]就是一个字符类,表示所有的大写字母,等价于[A-Z]。下边列出完整的字符串类
类 | 匹配字符 |
[[:alnum:]] | 文字、数字字符 |
[[:alpha:]] | 字母字符 |
[[:lower:]] | 小写字母 |
[[:upper:]] | 大写字母 |
[[:digit:]] | 小数 |
[[:xdigit:]] | 十六进制数字 |
[[:punct:]] | 标点符号 |
[[:blank:]] | 制表符和空格 |
[[:space:]] | 空格 |
[[:cntrl:]] | 所有控制符 |
[[:print:]] | 所有可打印的字符 |
[[:graph:]] | 除空格外所有可打印的字符 |
字符“^”和“$”分别用于匹配行首和行尾。“^$”可以匹配空行,“$^”不会报错,但不会输出任何东西。
^a[a-z]t$ ##a开头,t结尾,中间含有一个小写字母的行。
^[0-9] ##以数字开头的行
5、字符转义
元字符“.”、“[”等不能直接匹配,需要用“\”取消元字符的特殊含义。
www\.google\.cn
##匹配 www.google.cn
【转载请注明文章出处:/article/10208619.html】
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次 |
有时需要将多个字符构成的模式用括号括起来。
$ 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开头的行
【转载请注明文章出处:/article/10208619.html】
9、分支
前边介绍过的正则表达式,简单地执行“与”的组合,如:
^ht$ ##表示以h开头,并且以t结尾的行
若想表达“或”的意思,需要“|”。
^h|t$ ##表示以h开头,或者以t结尾的行
10、逆向引用
可以用“\”加上子表达式编号表示再次使用该子表达式匹配到的模式。子表达式编号根据出现的顺序从左至右。
(\<.*\>).?( )*\1
##分解介绍如下
① (\<.*\>) 表示任意长度的单词,编号为1的子表达式。
② .? 0个或1个标点(因为前边匹配任意长度的单词,此处只能匹配到标点)。
③ ( )* 0个或多个空格,编号为2的子表达式。
④ \1 第一个子表达式匹配到的模式再次出现。
【转载请注明文章出处:/article/10208619.html】
相关文章推荐
- shell浅谈之二运算符和IF条件判断
- webshell智能查杀
- Jenkins+Extended Choice Parameter+Shell脚本+Gradle构建不同环境下的发布版本(测试环境,生产环境等等)
- bash嵌套expect实现交换机的交互式登录实例
- shell脚本加密工具
- 生成树状结构的脚本bat\python\shell
- shell新增用户
- spark shell编程基础知识
- Shell数组例子
- shell脚本显示颜色的设置
- linux基础之shell编程(4)-for循环和case语句
- shell浅谈之一变量和引用
- c bash 代码遍历文件夹下所有文件
- shell变量
- shell if语句
- Xshell 连接 Ubuntu虚拟机
- Bash循环与分支浅谈
- 用PHP执行shell命令
- Shell脚本 curl获取必应每日壁纸(Mac OS)
- Shell之实现多线程