这里提到的主要是在bash的suse11环境下的grep命令,以避免因系统环境的不同而导致命令执行后导致与描述的不同。
grep是根据指定条件,逐行进行匹配,并将匹配内容的行显示出来的类unix工具
语法:
grep [options] PATTERN file1 …
常用参数(options):
-v 对结果取反
-i: 忽略字母大小写
-o:仅显示匹配到的字符串
-E :支持扩展正则表达式
-A n:往下多显示n行
--color:不同的颜色显示被匹配的内容
PATTERN:配置模式,通常使用正则表达式而正则通常分为下面两类
basic regexp;基本正则表达式 ,grep仅支持这个
extended regexp 扩展正则表达式,egrep支持,grep需要加参数-E来支持
基本正则基础:
.:匹配任意单个字符 r..t 匹配rt之间的任意两个字符的单词,如root,rcct,rdct
[]:指定范围内的任意单个字符,如[abc],匹配a或b或c
[^]:指定范围内相反的任意单个字符,如[^ab],匹配a,b之外的单个字符
[:upper:]表示所有大写字母
[:lower:]表示所有小写字母
[:digit:]所有数字
[:alpha:]所有字母
[:alnum:]包含数字和字母
[:space:]所有空白字符,包括空格和tab键
[:punct:]所有标点符号
正常使用为[[:upper:]],而这类取反,则[^[:upper:]]。
*:匹配其前面的字符任意次 如ab*c,匹配abbc,abc,abbbbc,ac,accb任意次包括0次
例子
linux1:~ # grep "r[a-z]*t" /etc/passwd root:x:0:0:root:/root:/bin/bash lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash 上面结果与下面命令结果一致: grep "r[[:lower:]]*t" /etc/passwd
.*:匹配任意长度的任意字符,贪婪模式,即能匹配多长就匹配多长,最长为一行
X\{m,n\}:表示X至少出现m次,至多出现n次,比如X\{m,\},X\{0,n\}
? :匹配次数的符号,匹配前面的字符0次或1次
锚定符
^:表示行首匹配,不出现在[]内。
^r..t:匹配出现在行首的r后跟任意两个字符,再加t
$:锚定行尾
^$:锚定空白行
\<:锚定词首 也可以写成\b
\<r..t :匹配r出现词首的字符串(出现非字母则该单词结束)
\>:锚定词尾 也可以写成\b,然后出现的位置不同。
r..t\>
\(\):先对字符分组,然后通过\1,\2来引用第1分组,第2分组等等
例子:
文件2内容如下
He love his lover。
She like her liker。
找出文件内容中使用单词和该单词+r的单词
linux1:/home/test # grep "\(l..e\).*\1r" 2 He love his lover. She like her liker.
扩展正则表达式
基本的元字符中\(\)改为()用于分组
基本的元字符中\{\}改为{}
+:次数匹配,匹配其前的字符至少一次
a|b:或者,表示a或b都行
本文出自 “测试的律动” 博客,请务必保留此出处http://fociceo.blog.51cto.com/2480/1664430
原文地址:http://fociceo.blog.51cto.com/2480/1664430