正则表达式通常被用来检索,替换那些符合某个模式的内容,通常是使用一类字符所书写的模式,而这些模式通常是元字符和普通字符的混合体

我们通常使用选取条件,只显示符合条件的工具有GREP, EGREP,FGREP

1,GREP 全称是:Globle searchRegular RE) and Print out the line ,< /span>全面搜索正则表达式并把它打印出来,支持基本的正则表达式

2,EGREPExtended GREP, 扩展的GREP,支持扩展的正则表达式

3,FGREP,fast GREP,不支持正则表达式

三者中 FGREP是最快速的,效率最高,但是不支持模式(pattern)匹配,所以我们一般不使用,最常用的是GREP和EGREP

我们来解释GREP已经EGREP的内容,能够使大家明白GREP和EGREP的用法

我们来看GREP的语法格式

GREP[option] ‘pattern’FILE

GREP[选项]‘模式’文件

我们首先看pattern(模式),然后再看option

Pattern是由元字符和普通字符组成

常用的pattern解释如下

符号

作用

用法格式

^脱字符

锚定行首

^patten

$

锚定行尾

Pattern$

.

匹配任意字符

*

匹配紧挨再前面的任意字符

[]

匹配指定范围内的任意字符

[^]

匹配非指定范围的任意字符

\?

匹配其前面的字符1次或者0

\{m,n\}

匹配前面的字符至少m次,至多n

\<

锚定词首

\<pattern

\>

锚定词尾

Patteren\>

\(\)

分组

\(pattern\)

拓展选项

.*

匹配任意长度字符

[a-z] [:lower:]

小写字母

[A-Z][:upper:]

大写字母

[0-9][:digit:]

数字

[:alpha:]

字母

[:almum:]

字母或者数字

[:space:]

空格

[:punct:]

\{m,\}+m(增强版的)

最少匹配m次,最多无限次

\{0,m\}

不大于m

\{m\}

精确匹配m

\(pattern\) .*\1

pattern所匹配的字符为一个组

增强的正则表达式:

+

匹配前面的数字至少N

|

选择

我们来看grep的选项

--color 颜色

-v反向选取,

-o只显示被匹配到的字符串,而不是整个行

-i 不区分大小写

-A # 显示匹配的行时,顺带显示后面的#个行

-B # 显示匹配的行时,顺带显示前面的#个行

-C # 显示匹配的行时,顺带显示前后的#个行

-E使用增强的正则表达式

我们来举例:

eg1 :查看/etc/passwd下一root 开头,以sh结尾的

# grep "^r.*sh$" /etc/passwd

root:x:0:0:root:/root:/bin/bash

我们来查看/etc/passwd下的内容,我们使用#/etc/passwd来查看,我们看部分截图

 

解释:寻找以r开头,所以使用脱字符^, ^r表示, . 表示任意字符,*表示匹配所在其前的任意字符,

所以.* 就表示匹配任意字符若干次,$ 表示锚定行尾,所以sh$就表示以sh结尾的行

综合上面描述# grep"^r.*sh$" /etc/passwd 就表示匹配以r开头,sh结尾的行

eg2:显示./etc/http.d/conf/httpd.conf中非空白字符行

# grep –v “^$”/etc/http.d/conf/httpd.conf 

我们看到 ^$表示空白行,^表示行首,$表示行尾,所以^$ 表示整个行

 

eg3,显示ifconfig中匹配1-255之间的数字

ifconfig | grep--color=auto -E"\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

解释:管道命令ifconfig 的输出,送给了grep, 

--color=auto 表示匹配到的颜色是默认红色

-E表示使用增强型的正则表达式

\< \>分别表示词的开头和结尾

表示或者,多选一

[1-9] 表示一位数字

[1-9][0-9]表示两位数字

1[0-9][0-9]表示以1开头的两位数字

2[0-4][0-9]表示已2开头0-4为十位数,0-9为个位数的数字

25[0-5]25开头,0-5为个位数字的数字

eg4. 显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同;

答案:\(.n\).*\1

解释:此处我们使用了分组的概念分组的模式\(pattern\),套用模式 \(.n\) 表示以任意字符后加一个n是个分组,后面的.* 表示任意长度任意字符\1 表示与前面的分组一样

eg5.显示/etc/httpd/conf/httpd.conf中以一个或者多个空白字符开头的行

grep “^[[:space:]]\{1,\} “/etc/httpd/conf/httpd.conf

grep -E “^[[:space:]]+”/etc/httpd/conf/httpd.conf

解释:

\{1,\} 表示匹配前面的pattern至少1次,[:space:]是空白字符,[ ]表示匹配指定范围内的任意字符;表示匹配行首

在增强版的正则表达式也表示至少一次匹

我们就写到这里,希望大家多多交流