一、概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
二、分类
grep 基本正则表达式
egrep 扩展正则表达式
fgrep 不支持正则表达式元字符,搜索字符串的速度快;
三、基本正则表达式grep
基本正则表达式grep: Galobal search Reagular Expression and Printing
1、命令格式
grep [options](选项) "pattern"(模式) /path/to/file (文件)
2、命令选项
-i查找内容时忽略大小写(Ignore Case) -v反转查找(in Vert) --color=auto:结果匹配内容带颜色显示,默认为红色 export GREP_COLOR='01;36' 颜色可自己更改 -v:反向选取,只显示不符合模式的行; -o:只显示配模式匹配的字符串,而不是整个行; -i:不区分字符大小写 -A #:显示匹配到行时,顺带显示其后面的#个行; -B #:前面的#行; -C #:前后的#行; -E:调用扩展正则表达式; grep -E =egrep
3、元字符
元字符:*,?,不表示字符本身的意义,而是用于额外功能性的描述;
^:锚定行首的符合条件的内容,用法格式"^pattern"; $:锚定行尾的符合条件的内容,用法格式"pattern$"; ^pattern$ ^$:空白行 grep "^$" /etc/rc.d/rc.sysinit |wc -l 查找空白行并统计行数 .:匹配任意单个字符; *:匹配紧挨在其前面的字符的字符任意次; a*b,ab,aab,acb,b .*:匹配任意长度的任意字符 grep "r.*h" /etc/passwd grep "^r.*$" /etc/passwd []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 [a-z],[A-Z],[0-9] [:lower:] a-z [:upper:] A-Z [:digit:] 0-9 [:alpha:] a-z,A-Z [:alnum:] a-z,A-Z,0-9 [:space:] 空白字符 [:pundt:] 标点符号 grep "r[0-9].*h" /etc/passwd \?:匹配紧挨在其前面的字符0次或1次; a\?b:ab,acb,aab,b ^a\?b$: \{m,n}:匹配其前面的字符至少m次,至多n次 \{0,n}:至多n次,0-n次; \{m,\}:至少m次 \{m,\}:精确匹配m次 a\{1,3}b: grep "[bB].\{2,5\}[tT]":Boot,B123T,bsd12T \< 锚定词首,用法格式:\<pattern \b: \bpattern \> 锚定词尾,用法格式:pattern\> \b: pattern\b \(\):分组,用法格式 \(ab\)\{1,3\}: ab,aab,abb,abab,ababab \(a.b\).*\1:前匹配后引用
四、扩展正则表达式egrep=grep -E
.:任意单个字符 []:指定范围内的单个字符 [^]:指定范围外的单个字符 *:其前面的字符任意次 +:匹配其前面的字符至少1次 ?:匹配0次到1次 {m,n} ():分组,支持引用\1,\2; a|b:a或者b;二选一 grep "(c|C)at" /etc/test.txt \<:锚定词首 \>:锚定词尾 ^:行首锚定 $:行尾锚定
五、应用实例:
1、显示/etc/passwd以ro开头的行;
2、显示/etc/passwd,以nologin结尾的行
3、显示/etc/passwd,以r开头以h结尾的行
显示/etc/rc.d/rc.sysinit文件中的空白行并统计行数
4、取出默认shell为bash,且其用户ID号最小的用户的用户名
5、显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同
6、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行
7、显示/var/log/secure.1文件中记录的属于当前系统时间的前一天的信息中包含“Failed password”或“FAILED LOGIN”的行;而后统计相关的行数
8、匹配IP地址有两种方式
[root@lyd ~]# ifconfig | grep -o -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>" 172.16.251.65 127.0.0.1
转载于:https://blog.51cto.com/liyandong/1248745