【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:]]
除空格外所有可打印的字符
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次
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
原创粉丝点击