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

#用\b的效果和“\<\>”一致
grep '\bgold\b' 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

原文地址:http://blog.51cto.com/11555417/2143901

时间: 2024-08-08 07:26:35

linux学习-grep使用正则表达式示例的相关文章

[Linux 006]——grep和正则表达式

在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配,这是一个强大的功能,有必要好好掌握. 1.grep 初体验 grep PATTERN [OPTIONS] FILE:在文件中按照模式进行查找.FILE 是我们要查找的目标文件,如果不指定目标文件,grep 将会从标准输入中读取输入的内容,然后进行匹配.为了方便起见,本文的所有演示都在命令行中通过标准

Linux学习-shell利用正则表达式验证邮箱合法性

引文:在今天这个时代,Email已经成为一种重要的通信方式.给导师发邮件,学术研究之间的交流,etc.常常用到Email,然而Email的验证却有点小难度,下面给出一个在Linux下使用shell脚本编写的一个实例. linux中将正则表达式和sed.gawk结合起来,功能非常强大.我说的是真的,没骗你的,好好学吧. 邮箱验证 Email地址的基本格式为: username@hostname 1.username部分模式匹配 username的值可以用字符数子字符以及以下特殊字符: 点号 单破折

Linux学习笔记之正则表达式

不积跬步无以至千里,不积小流无以成江海    --荀子<劝学篇>   不管是看Linux书籍还是视频教程都有说正则表达式相当重要,正确运用正则表达式能够帮助管理系统是减少很多的工作量.实际上,正则表达式是一种处理字符串的方法,通过一些特殊符号的辅助,让用户轻易达到查找.删除.替换特定字符串.可以说,它是Linux基础当中的基础,学完之后一定会大有增益. 一.通配符和正则表达式的区别: 通配符只是bash接口中的一个功能,而正则表达式则是一种字符串处理的表示方式:学习正则表达式之前一定要将bas

linux 学习基础4正则表达式

grep 根据模式来搜索文本文件 并将符合模式的行显示出来  grep [options] 模式 FILE 选项 -i  ignore case忽略字符大小写 --colour 用颜色标记被匹配到的字符 -o  只显示被匹配到行 -v  只显示被匹配到的行之外的行 -A number  显示被匹配到行的下面多少行 -B number  显示被匹配到行上面多少行 -C number  显示被匹配到的行上 下 个多少行 -E <=> egrep 扩展的正则表达式 正则表达式的元字符介绍 1 次数匹

Linux基础--grep与正则表达式

grep的基本用法可以参照此[链接]中的文档,写的很详细了,这里主要说明正则表达式的用法. grep默认支持基本正则表达式(BRE)和扩展的正则表达式(ERE). fgrep不支持正则表达式,不需要加载正则表达式引擎,因此速度较快. egrep只支持扩展的正则表达式(ERE). 'egrep' means 'grep -E'.  'fgrep' means 'grep -F'. 扩展的正则表达式(ERE)与基本正则表达式(BRE)的区别并不大,BRE中的匹配规则在ERE中同样适用,只是ERE在使

Linux学习 -- Shell编程 -- 正则表达式

正则表达式与通配符 正则 -- 匹配字符串 -- 包含匹配     grep.awk.sed等 通配符 -- 匹配文件名 -- 完全匹配  ls.find.cp等 基础正则表达式

Linux学习-09-学习正则表达式-1

grep进阶 截取:dmesg(列出讯息) |grep '内容' -A 后面加数字 after 后面几行 -B 后面加数字 befor后面几行 寻找regular_express.txt 中的'the'行 cat regular_express.txt |grep 'the' grep 'the' regular_express.txt grep -nv (加行号,反选)'the' regular_express.txt grep -ni (加行号,不区分大小写)'the' regular_ex

Linux系统grep及正则表达式详解

1.grep:根据模式搜索文本 并将符合模式的文本行显示出来 文本字符和正则表达式的元字符组合而成匹配条件 grep'root' /etc/passwd搜索/etc/passwd文件中包含有root字符的行显示出来 -i:只显示被模式匹配的行 --color:被模式匹配的行用颜色显示出来 -v:只显示没有被模式匹配的行 -o:只显示被模式匹配到的字符串 2.正则表达式: 元字符: .:表示匹配任意单个字符 grep'r..t' /etc/passwd []:表示匹配指定范围内的任意单个字符 [^

Python学习手册之正则表达式示例--邮箱地址提取

在上一篇文章中,我们介绍了 Python 的捕获组和特殊匹配字符串,现在我们介绍 Python 的正则表达式使用示例.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/10040430.html 邮箱地址提取为了演示正则表达式的示例用法,我们创建一个从字符串中提取电子邮箱地址的程序.假设我们有一个包含电子邮箱地址的字符串. string = "Please contact [email protected] for assistance" 我们希