linux学习-grep使用正则表达式示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习-grep使用正则表达式示例相关的知识,希望对你有一定的参考价值。

    在linux上使用grep配合正则表达式可以产生强大的搜索的效果,由于正则表达式中含有较多的特殊字符,所以结合grep时,最好使用单引号将表达式括起来,以免造成错误。首先创建一个文件RegExp.txt,文本内容如下所示:

--------TEXT BEGIN-------------

good morining teacher
hellp world is as script
gold sunshine looks beautiful
golden time files
god belss me
what a delicious food
they teast Good
you fell glad
wrong word gooood
wrong word g10d
wrong word g12d
wrong word g13d
www.helloworld.com
[email protected]
Upper case 
100% means pure
php have gd module

----------TEXT END-------------


使用“^”匹配行首:

#搜索以good开头的行
grep '^good' RegExp.txt

技术分享图片


使用“$”匹配行尾

#搜索以Good结尾的行
grep 'Good$' RegExp.txt

技术分享图片


使用“^$”组合,配合空行,下面的命令可以计算文件中共有多少空行

#搜索空行的行数
grep -c '^$' RegExp.txt

技术分享图片


使用方括号匹配多种可能

#搜索包含Good和good的行
grep '[Gg]ood' RegExp.txt

技术分享图片


在方括号中使用^做反选

#搜索一个包含ood的行,但是不能是Good或good
#记住在方括号中使用尖括号表示的是“非”
grep '[^Gg]ood' RegExp.txt

技术分享图片


使用“.”号

#搜索包含一个词,该词以g开头,紧接着是两个任意字符、再接着是一个d的行
grep 'g..d' RegExp.txt

技术分享图片

#搜索包含一个词,该词以G或g开头、紧接着是两个任意字符,再接着是一个d的行
grep '[Gg]..d' RegExp.txt

技术分享图片

#搜索这样一些行,该行包含某个单词,该词满足如下条件:
#1.第一个字符可以是G或g
#2.第二个字符可以是l或o
#3.第三个字符可以使换行符之外的任意字符
#4.第四个字符一定是d
grep '[Gg][lo].d' RegExp.txt

技术分享图片


使用精确匹配

#搜索含有gold的行
#从搜索结果中发现golden也匹配出来
grep 'gold' RegExp.txt

技术分享图片

#正如上例所示,一般搜索时,想要搜索含有gold的行,发现golden也匹配了
#现在需要精确匹配含有gold这个单词的行
grep '<gold>' RegExp.txt

技术分享图片

#用的效果和“<>”一致
grep 'gold' RegExp.txt

技术分享图片


使用“*”号

#搜索这样一些行,该行包含某个单词,该单词满足如下条件:
#1.以g开头
#2.g后面跟零到无限个o
#3.零到无限个o后面跟d
grep go*d RegExp.txt

技术分享图片


使用"*."号

#1.以g开头
#2.g后面一定有字符
#3.最后是d
grep 'g.*d' RegExp.txt

技术分享图片


使用"-"号

#文件中有一些拼写错误的单词,发现是把glod中的o字母写成数字0了
grep 'g1[0-9]d' RegExp.txt

技术分享图片


使用""做字符转义

#搜索文件中包含域名www.helloworld.com的行 
#从搜索的结果来看,这里的"."号被解析成了除换行意外的任意字符
#想要把这个点只当做一个字符点来用,就需要对其使用转义符
grep 'www.helloworld.com' RegExp.txt

技术分享图片

#这里将点做转义,则输出的结果满足预期
grep 'www.helloworld.com' RegExp.txt

技术分享图片


使用“{}”号

#文档中有一个单词good被拼写错了,多写了几个o
#搜索以字母g开头包含两个以上o的单词
grep 'go{2,}' RegExp.txt

技术分享图片

#搜索以字母g开头,中间正好包含4个o的单词
grep 'go{4}' RegExp.txt

技术分享图片


特殊的POSIX字符

#grep支持一些特殊的POSIX字符,举例如下
#[:alnum:]    文字数字字符
#[:alpha:]    文字字符
#[:digit:]    数字字符
#[:graph:]    非空字符(非空格、控制字符)    
#[:lower:]    小写字符
#[:cntrl;]    控制字符
#[:print:]    非空字符(包含空格)
#[:punct:]    标点符号
#[:space:]    所有空白字符(新行,空格,制表符)
#[:upper:]    大写字符
#[:xdigit:]   十六进制数字(0-9,a-f,A-F)

#搜索以大写字母开头的行
grep ^[[:upper:]] RegExp.txt

技术分享图片

#搜索以数字开头的行
grep ^[[:digit:]] RegExp.txt

技术分享图片


使用扩展的正则表达式egrep

#搜索g和d之间至少有一个0的行
#“+”代表匹配前面的字符1次以上(含一次)
egrep 'go+d' RegExp.txt

技术分享图片

#搜索g和d之间只有0个或者1个o的行(0次或1次)
#“?”代表匹配前面的字符1次以上
egrep 'go?d' RegExp.txt

技术分享图片

#搜索glad或gold的行
egrep 'glad|gold' RegExp.txt

技术分享图片

#搜索有glad或者gold的行的另外一种写法
egrep 'g(la|ol)d' RegExp.txt

技术分享图片


以上是关于linux学习-grep使用正则表达式示例的主要内容,如果未能解决你的问题,请参考以下文章

Linxu学习008grep和正则表达式

正则表达式 - grep、sed、awk - 处理大型文本文件

grep学习

Linux学习(二十三)正则表达式grep/egrep

随堂练习(正则表达式 grep)

Shell 学习:正则表达式