正则表达式和grep命令的用法:
一、正则表达式:
正则表达式(也称为regular Expression,简称RE)就是由普通字符(例如字符a到z)以及特殊字符(称之为元字符)组成的文字模式。
该模式描述在查找文字主体时待匹配的一个或多个字符串。
正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表示通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序。vim、grep、find等命令都支持正则表达式。
常用正则表达式:
1、其中,.代表任意单个字符,*代表重复零个到无穷多个的前一个字符。
例如,你要查找文件data中以an开头的所有行并显示,可以用一下命令:
grep'an.*data|more
2、^代表行的开始。^love$ 如:与所有love开头的行匹配
grep ^le test
3、$代表行的结束。love$ 如:与所有love结尾的行匹配
那么‘^$’就表示空行
grep at$ test (^ 和 $)是定位元字符
4、[···]匹配括号中的字符之一
[abc] 匹配单个字符a或b或c
[123] 匹配单个字符1或2或3
[a-z] 匹配小写字母a-z之一
[a-zA-Z] 匹配任意英文字母之一
[0-9a-zA-Z] 匹配任意英文字母或数字之一
注意:上面标红色的单子和之一,不管[] 里面多复杂,它的结果都是一个字符!
grep 'l[ae]e' test
grep'/l[ae]/' test
4、预定义的POSIX字符类
字符类 说明
[:alnum:] 字母数字字符
[:alpha:] 代表任何英文大小写字符,即A-Z,a-z
[:lower:] 小写字母字符
[:graph:] 除了空格符(空格键与[Tab]按键)外的其他所有按键
[:upper:] 大写字母字符
[:digit:] 数字
[:space:] 空白字符(禁止打印),如回车符、换行符、竖直制表符合换页符
[:punct:] 标点字符(即”’?!;:#$)
[:cntrl:] 控制字符(禁止打印)
[:print:] 代表任何可以被打印出来的字符
尤其上表中的[:alnum:]、[:alpha:]、[:upper:]、[:lower:] 、[:digit:]这几个一定要知道代表什么意思,因为它要比a-z或A-Z的用途更确定。
要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grepd的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。
$ls-l|grep '^d'
通过管道过滤ls-l输出的内容,只显示以d开头的行。
$grep 'test' d*
显示所有以d开头的文件中包含tset的行。
$grep ’test‘ aa bb cc
显示在aa bb,cc文件中匹配test的行。
$grep '[a-z]\[5,\]' aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
扩展正则表达式
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。
扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据。
元数据 意义和范例
+ 重复前面字符1到多次。例如:匹配god,good
goood等等字符串。 grep -nE go+d'regular.txt
? 匹配0或1次前面的字符。例如,匹配gd,god
grep -nE‘go?d’regular.txt
| 或(or)的方式配多个字串。例如:grep –nE‘god|good’ regular.txt 匹配god或者good
匹配整个括号内的字符串,原来都是匹配单个字符。
( ) 例如:搜寻good或glad grep –nE ‘g(oo|la)’regular.txt
Linux下面的正则表达式博大精深,上文支持总结了最常用的部分,如果熟练掌握的上面部分的正则表达式基本上可以满足日常使用了。
另外Linux很多命令支持正则表达式,比如find、sed、awk。请在使用的时候参照这些命令的手册使用正则表达式。
转载于:https://blog.51cto.com/11315445/1784033