这里提到的主要是在bash的suse11环境下的grep命令,以避免因系统环境的不同而导致命令执行后导致与描述的不同。
grep是根据指定条件,逐行进行匹配,并将匹配内容的行显示出来的类unix工具
语法:
1
| 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次
例子
1
2
3
4
5
6
| 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 herliker。 找出文件内容中使用单词和该单词+r的单词 1
2
3
| linux1:/home/test # grep "\(l..e\).*\1r" 2
He love his lover.
She like her liker.
|
扩展正则表达式
基本的元字符中\(\)改为()用于分组 基本的元字符中\{\}改为{} +:次数匹配,匹配其前的字符至少一次 a|b:或者,表示a或b都行
|