正则表达式通常被用来检索,替换那些符合某个模式的内容,通常是使用一类字符所书写的模式,而这些模式通常是元字符和普通字符的混合体
我们通常使用选取条件,只显示符合条件的工具有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:]是空白字符,[ ]表示匹配指定范围内的任意字符;^ 表示匹配行首
+ 在增强版的正则表达式也表示至少一次匹
我们就写到这里,希望大家多多交流