@H_404_2@
grep (Global search Regular Exmpression and Printing) 命令是Linux中最常用的命令之一,用于搜索给定文本文件中匹配某个特定模式(pattern)的行。其中模式为文本字符及正则表达式的元字符组合而成。@H_404_2@
@H_404_2@
@H_404_2@
首先来介绍一下grep的基本用法,通过man grep 可以看到grep的帮助信息:@H_404_2@
@H_404_2@那么grep,egrep,fgrep有何区别呢?@H_404_2@
fgrep: @R_301_472@正则表达式元字符,但搜索字符串的速度更快;@H_404_2@
@H_404_2@
1. grep的常用选项(OPTIONS):@H_404_2@
--color=auto:高亮显示匹配到的字符串;@H_404_2@
@H_404_2@-o: 只显示被模式匹配到的字串,而不是整个行;@H_404_2@
-i: 不区分字符大小写;@H_404_2@
-A #:显示匹配到的行时,顺带显示其后面的#个行;@H_404_2@
-B #:前面的#行;@H_404_2@
-C #:前后的#行;@H_404_2@
-E: 使用扩展的正则表达式, grep -E = egrep@H_404_2@
@H_404_2@
grep命令的模式十分灵活,可以是字符串,也可以是变量,还可以是正则表达式。需要注意的是,无论模式是何种形式,只要模式中包含空格,就需要使用双引号将模式引起来,如果不加双引号,空格后的单词容易被误认为是文件名。大部分情况下,使用单引号将模式引起来也是可以的。@H_404_2@
@H_404_2@
2. 基本正则表达式
@H_404_2@
2.1 基本元字符@H_404_2@
元字符:不表示字符本身的意义,而用于额外功能性的描述@H_404_2@
. :点号,匹配任意单个字符。@H_404_2@
[ ]:匹配指定范围内的任意单个字符: [a-z],[A-Z],[0-9] @H_404_2@
[^ ]:匹配指定范围外的任意单个字符:如grep "[^0-9]" file,表示除了数字,都匹配@H_404_2@
@H_404_2@
"a.b"表示匹配a和b中间有一个任意字符的内容@H_404_2@
*:星号,匹配紧挨在其前面的字符任意次(包括0次)。@H_404_2@
"a*b"表示匹配b前的a任意次@H_404_2@
.*:点星组合,匹配任意长度的任意字符(包括0次)。@H_404_2@
"a.*b" 表示匹配ab之间的任意字符任意次。@H_404_2@
\?: 匹配其前面的字符1次或0次 ("\"为转义字符)@H_404_2@
"a\?b" 表示匹配b前的a 1次或0次@H_404_2@
@H_404_2@\{m,n\} :匹配其前面的字符至少m次,至多n次
@H_404_2@
\{0,n\}: 至多n次;0-n次;@H_404_2@
\{m,\}:至少m次@H_404_2@
\{m\}: 精确匹配m次;@H_404_2@
例如:\{2,\} 表示匹配至少2次@H_404_2@
@H_404_2@2.3 字符集合@H_404_2@
注意,需要额外的[ ]把表达式括起来@H_404_2@
例如: [[:digit:]],表示匹配0到9中任意一个数字,相当于[0-9],如果取反就是[^[:digit:]],即[^0-9].@H_404_2@
@H_404_2@
2.4 位置锚定@H_404_2@
如查找/etc/passwd文件中以root开头的行:@H_404_2@
@H_404_2@如查找/etc/passwd中以bash结尾的行:@H_404_2@
如查找/etc/passwd文件中以r开头,t结尾,中间包含两个任意字符的单词@H_404_2@
@H_404_2@
@H_404_2@
2.5 分组符号@H_404_2@
要匹配l..e.*l..er 的模式可以使用后向引用\1 @H_404_2@
grep "\(l..e\).*\1r" text 表示匹配结果如下:@H_404_2@