前言
grep(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式, grep 打印包含模式的所有行。
表达式
grep [选项]基本正则表达式[文件]
这里基本正则表达式可为字符串。
在g r e p命令中输入字符串参数时,最好将其用双引号括起来。
例如:“m y s t r i n g”。这样做有两个原因,一是以防被误解为 s h e l l命令,二是可以用来查找多个单词组成的字符串,例如:“jet plane”,如果不用双引号将其括起来,那么单词 p l a n e将被误认为是一个文件,查询结果将返回“文件不存在”的错误信息。
在调用变量时,也应该使用双引号
诸如: g r e p“$ M Y VA R”文件名,如果不这样,将没有返回结果。
在调用模式匹配时,应使用单引号。
常用的g r e p选项有:
- -c 只输出匹配行的计数。
- -i 不区分大小写(只适用于单字符)。
- -h 查询多文件时不显示文件名。
- -l 查询多文件时只输出包含匹配字符的文件名。
- -n 显示匹配行及行号。
- -s 不显示不存在或无匹配文本的错误信息。
- -v 显示不包含匹配文本的所有行。
字符串匹配
查询多个文件
如果要在当前目录下所有. d o c文件中查找字符串“s o r t”,方法如下:
$ grep “sort”*.doc
或在所有文件中查询单词 “sort it”
$ grep “sort it” *
精确匹配
抽取字符串 “48”:
$ grep “48” data.f
返回结果包含诸如 484 和 483 等,实际上应精确抽取只包含 48 的各行。
精确匹配有两种方式:
< Ta b >键
$ grep “48“ data.f
\ >:
$ grep “48>“ data.f
行匹配
返回包含字符串“4 8”的行数:
$ grep -c “48” data.f
返回包含字符串 “48” 的行,行数在第一列
$ grep -n “48” data.f
显示所有不包含4 8的各行:
$ grep -v “48” data.f
大小写敏感
缺省情况下,g r e p是大小写敏感的,如要查询大小写不敏感字符串,必须使用 - i开关。
grep -i “sept” data.f
与正则表达式
使用正则表达式时最好用单引号括起来,这样可以防止 g r e p中使用的专有模式与一些 s h e l l命令的特殊方式相混淆。
常用正则表达式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| ^word 搜寻以word开头的行。
word$ 搜寻以word结束的行
. 匹配任意一个字符。 例如:grep –n ‘e.e’ regular.txt 匹配e和e之间有任意一个字符,可以匹配eee,eae,eve,但是不匹配ee。
\ 转义字符。 例如:搜寻’,’是一个特殊字符,在正则表达式中有特殊含义。必须要先转义。grep –n ‘\,” regular.txt
* 前面的字符重复0到多次。 例如匹配gle,gogle,google,gooogle等等 grep –n ‘go*gle’ regular.txt
[list] 匹配一系列字符中的一个。 例如:匹配gl,gf。grep –n ‘g[lf]’ regular.txt
[n1-n2] 匹配一个字符范围中的一个字符。 例如:匹配数字字符 grep –n ‘[0-9]’ regular.txt
[^list] 匹配字符集以外的字符 例如:grep –n ‘[^o]‘ regular.txt 匹配非o字符
\<word 单词是的开头。 例如:匹配以g开头的单词 grep –n ‘\<g’ regular.txt
word\> 匹配单词结尾 例如:匹配以tion结尾的单词 grep –n ‘tion\>’ regular.txt
word\{n1\} 前面的字符重复n1 例如:匹配google。 grep –n ‘go\{2\}gle’ regular.txt
word\{n1,\} 前面的字符至少重复n1 例如:匹配google,gooogle。 grep –n ‘go\{2\}gle’ regular.txt
word\{n1,n2\} 前面的字符重复n1,n2次 例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt
|
扩展正则表达式:
grep -neE 可以使用扩展正则表达式。
1 2 3 4 5 6 7 8 9 10 11 12 13
| ? 匹配0个或1个在其之前的那个普通字符。 例如,匹配gd,god grep –nE ‘go?d’ regular.txt
+ 匹配1个或多个在其之前的那个普通字符,重复前面字符1到多次。 例如:匹配god,good,goood等等字符串。 grep –nE go+d’ regular.txt
() 表示一个字符集合或用在expr中,匹配整个括号内的字符串, 原来都是匹配单个字符。 例如:搜寻good或者glad grep –nE ‘g(oo|la)’ regular.txt
| 表示“或”,匹配一组可选的字符,或(or)的方式匹配多个字串。 例如:grep –nE ‘god|good’ regular.txt 匹配god或者good。
|
常用的集合表示方法有:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 纯数字:[[:digit:]]或[0-9]
小写字母:[[:lower:]]或[a-z]
大写字母:[[:upper:]]或[A-Z]
大小写字母:[[:alpha:]]或[a-zA-Z]
数字加字母:[[:alnum:]]或[0-9a-zA-Z]
空白字符:[[:space:]]
标点符号:[[:punct:]]
|