正则表达式一般被用来检索,替换那些符合某个模式的内容,一般是使用一类字符所书写的模式,而这些模式一般是元字符和普通字符的混合体git
咱们一般使用选取条件,只显示符合条件的工具备GREP, EGREP,FGREP正则表达式
1,GREP 全称是:Globle searchRegular RE) and Print out the line ,< /span>全面搜索正则表达式并把它打印出来,支持基本的正则表达式bash
2,EGREPExtended GREP, 扩展的GREP,支持扩展的正则表达式ide
3,FGREP,fast GREP,不支持正则表达式工具
三者中 FGREP是最快速的,效率最高,可是不支持模式(pattern)匹配,因此咱们通常不使用,最经常使用的是GREP和EGREPspa
咱们来解释GREP已经EGREP的内容,可以使你们明白GREP和EGREP的用法ci
咱们来看GREP的语法格式字符串
GREP[option] ‘pattern’FILEit
GREP[选项]‘模式’文件io
咱们首先看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:]是空白字符,[ ]表示匹配指定范围内的任意字符;^ 表示匹配行首
+ 在加强版的正则表达式也表示至少一次匹
咱们就写到这里,但愿你们多多交流