命令:grep,egrep,fgrep

在实际工作中,我们会对大量数据进行分析,时间有限,这时,我们就要使用文本查询功能,在大文本中查找是否有指定条件的文本内容。这时就需要用到文本查询工具。Linux常用的文本查询工具有:grep,egrep,fgrep。

它们的功能相近,而且可以相互替代。 文本查询就需要了解正则表达式。熟练掌握正则表达式,你就可以快速找到你需要查询的内容。正则表达式分为两种:

一、基本正则表达式

1、字符匹配

序号

符号

释义

1

.

单个任意字符

2

[]

单个指定范围内的任意字符,指定范围放在中括号中间。

a-c:小写字母a到c

A-C:大写字母A到C

0-9:数字0到9

[:lower:]:任意小写字母

[:upper:]:任意大写字母

[:alpha:]:任意字母,包括大写,小写

[:digit:]:任意数字,0-9

[:alnum:]:任意字母或数字

[:punct:]:任意非字母符号

[:xdigit:]:任意十六进制数字,包含0-9,a-f,A-F

也可以把范围直接相连,表示两个范围内的值都可以取,比如:a-c[:upper:]就表示可以取a到c和大写字母中的任意一个字符。

3

[^]

在指定范围前加^,表示指定范围外的任意字符

2、匹配次数,使用匹配次数符号,表示其前的字符会重复的次数

序号

符号

释义

1

*

任意次数,包括0次

2

\?

0次或1次

3

\+

至少1次

4

\{m\}

m次

5

\{m,n\}

最少m次,最多n次

6

\{m,\}

最少m次

7

\{0,n\}

最多n次

3、位置锚定,表示所在位置

序号

符号

释义

1

^

行首,在行的最开始

2

$

行尾,在行的最后面

3

\<

词首,在单词的最开始,表示在左边没有字符,或着是非字母字符,但注意,如果跟在.后会失效

4

\>

词尾,在单词的结束位置,表示在其右侧没有字符,或者是非字母字符,但注意,如果后面跟了.则会失效

5

\b

词首或词尾,如果在字母的左侧则表示词首,右侧则表示词尾

4、分组及引用

分组,把一段正则表达式放在一起,当一个对象使用,分组方法就是用\(和\)把正则表达式扩起来。

引用,就是在分组后用\数字表示和对应的分组正则表达式匹配得到的内容一致,\1表示第一组,\2表示第2组,依次类推。

二、扩充正则表达式

1、字符匹配

序号

符号

释义

1

.

单个任意字符

2

[]

单个指定范围内的任意字符,指定范围放在中括号中间。

a-c:小写字母a到c

A-C:大写字母A到C

0-9:数字0到9

[:lower:]:任意小写字母

[:upper:]:任意大写字母

[:alpha:]:任意字母,包括大写,小写

[:digit:]:任意数字,0-9

[:alnum:]:任意字母或数字

[:punct:]:任意非字母符号

[:xdigit:]:任意十六进制数字,包含0-9,a-f,A-F

也可以把范围直接相连,表示两个范围内的值都可以取,比如:a-c[:upper:]就表示可以取a到c和大写字母中的任意一个字符。

3

[^]

在指定范围前加^,表示指定范围外的任意字符

2、匹配次数

序号

符号

释义

1

*

任意次数,包括0次

2

0次或1次

3

+

至少1次

4

{m}

m次

5

{m,n}

最少m次,最多n次

6

{m,}

最少m次

7

{0,n}

最多n次

3、位置锚定

序号

符号

释义

1

^

行首,在行的最开始

2

$

行尾,在行的最后面

3

\<

词首,在单词的最开始,表示在左边没有字符,或着是非字母字符,但注意,如果跟在.后会失效

4

\>

词尾,在单词的结束位置,表示在其右侧没有字符,或者是非字母字符,但注意,如果后面跟了.则会失效

4、分组及引用

分组:()

引用:\数字

查询命令格式:grep|egrep|fgrep [参数] "表达式" [文件]

其中grep默认支持基本正则表达式,egrep:扩充正则表达式,fgrep:不支持正则表达式,但可以通过参数来修改。

-E:扩充正则表达式

-G:基本正则表达式

-F:不支持正则表达式

还有以下常用参数

-i:忽略大小写

-o:仅返回匹配的部分

-v:反向匹配,返回不能匹配的行

-q:静默模式,不返回内容,但运行结果会有值,有匹配文本就返回0,否则返回1

-A[ ]m:中间可以有空格,也可以没有,返回匹配的行以及匹配行后m行

-B[ ]m:返回匹配行前m行以及匹配的行

-C[ ]m: 返回匹配行前m行、匹配行以及匹配后m行

--color=VALUE:改变返回内容的配色方案,取值可以是:never:不高亮显示、always:匹配内容高亮,再次查询时依然高亮、auto:匹配内容高亮,再次查询时不高亮显示