目录:
一、简介
二、grep详解
1.grep用法及常用选项
2.正则表达式
2.1正则表达式简介和分类
2.2基本正则表达式在grep中的作用
2.3grep示例
2.4扩展正则表达式在egrep的作用
2.5egrep示例
2.6其他
一、简介
grep(Globallysearch a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep是有家族的,家族成员如下:
(1)grep,默认支持基本正则表达式
(2)egrep,支持扩展正则表达式
(3)fgrep,不支持正则表达式,搜索字符串的速度快
二、grep详解
1.grep用法及常用选项
grep [options] ‘pattern’ FILE 常用选项(options): -v:反向选取,只显示不符合模式的行 -o:只显示被模式匹配到的字串,而不是整个行 -i:不区分字符大小写 -A n:显示匹配到的行时,顺带显示其后面的n行 -B n:显示匹配到的行时,顺带显示其前面的n行 -C n:显示匹配到的行时,顺带显示其前后的n行 -E:使用扩展的正则表达式,相当于 egrep
2.正则表达式
2.1正则表达式的分类
正则表达式是一类字符所书写的模式(pattern),该类字符被称为元字符,它不表示字符本身的意义,而用于额外功能性的描述。
正则表达式分为两种,分别是基本正则表达式和扩展正则表达式。
2.2基本正则表达式在grep的作用
注意:基本正则表达式默认是工作在贪婪模式(尽可能长地去匹配符合模式的内容)
^ :锚定行首符合条件的内容,用法格式 ”^pattern” $ :锚定行尾符合条件的内容,用法格式 ”pattern$” ^$:两项结合可以匹配空白行 . :匹配任意单个字符 * :匹配紧挨在其前面的字符任意次 .*:匹配任意长度的任意字符 [] :匹配指定范围内的任意单个字符 [^] :匹配指定范围外的任意单个字符 \? :匹配紧挨在其前面的字符0次或1次 \{m\} :精确匹配m次 \{m,\} :匹配至少m次 \{m,n\} :匹配其前面的字符至少m次,至多n次 \< :锚定词首,用法格式 --> \<pattern \> :锚定词尾,用法格式 --> pattern\> \(\):分组,用法格式 --> \(pattern\) 相关字符集合: [:digit:] : 所有数字, 相当于0-9 [:lower:] : 所有的小写字母 [:upper:] : 所有的大写字母 [:alpha:] : 所有的字母 [:alnum:] : 相当于[0-9a-zA-Z] [:space:] : 空白字符 [:punct:] : 所有标点符号
2.3grep示例
(1)匹配/etc/passwd中包含‘root’字符串的行
# grep --color=auto 'root' /etc/passwd
(2)匹配/etc/passwd中以‘root’字符串开始的行
# grep --color=auto'^root' /etc/passwd
(3)匹配/etc/passwd中以‘bash’字符串结尾的行
# grep --color=auto 'bash$' /etc/passwd
(4)查找/etc/rc.d/rc.sysinit中有多少个空白行
# grep"^$" /etc/rc.d/rc.sysinit | wc -l
(5)匹配grep.txt中符合任意个a后面跟着个b的行
#grep --color=auto "a*b" grep.txt
(6)匹配/etc/passwd中字符r后面跟着任意个字符之后紧跟着字符h的行
# grep --color=auto"r.*h" /etc/passwd
(7)匹配/etc/passwd中以字符r开头后面跟着任意个字符之后紧跟着以字符h结尾的行
# grep --color=auto"^r.*h$" /etc/passwd
(8)匹配/etc/passwd中字符r后面跟着个数字再跟着任意个字符再紧跟着字符h的行
# grep"r[0-9].*h" /etc/passwd
(9)匹配grep.txt中出现0次或1次个a后面跟着个b的行
# grep"a\?b" grep.txt
(10)匹配grep.txt中出现3次a后面跟着个b的行
# grep --color=auto “a\{3\}b” grep.txt
(11)显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行
# grep --color=auto ^#[[:space:]]\{1,\}[^[:space:]]/etc/rc.d/rc.sysinit
(12)显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同
# grep --color=auto “\(.n\).*\1” /etc/rc.d/rc.sysinit
(13)显示/etc/rc.d/rc.sysinit以boo为词首的单词
# grep --color=auto “\<boo” /etc/rc.d/rc.sysinit
2.4扩展正则表达式在grep的作用
^ :锚定行首的符合条件的内容,用法格式 ”^pattern” $ :锚定行尾的符合条件的内容,用法格式 ”pattern$” . :匹配任意单个字符 [ ] :匹配指定范围内的任意单个字符 [^] :匹配指定范围外的任意单个字符 * :匹配紧挨在其前面的字符任意次 + :匹配其前面的字符至少1次 ? :匹配紧挨在其前面的字符0次或1次 {m,n} :匹配其前面的字符至少m次,至多n次 ( ) :分组 a|b:二选一 \< :锚定词首,用法格式--> \<pattern \> :锚定词尾,用法格式--> pattern\>
2.5egrep示例
(1)匹配grep.txt中a出现1次以上后面跟着个b的行
# egrep--color=auto “a+b” grep.txt
(2)匹配grep.txt中a出现0次或者1次后面跟着个b的行
# egrep--color=auto ”a?b“ grep.txt
(3)匹配/proc/cpuinfo中有vendor或者stepping的行
# egrep--color=auto "(vendor|stepping)" /proc/cpuinfo
2.6其他
在egrep中其他和grep相同用法的正则匹配就不在这里演示了。关于命令的相关选项请找man文档。