一、概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 正则表达式的特点是: 1. 灵活性、逻辑性和功能性非常的强; 2. 可以迅速地用极简单的方式达到字符串的复杂控制。 3. 对于刚接触的人来说,比较晦涩难懂。 二、分类
三、基本正则表达式grep
基本正则表达式grep: Galobal search Reagular Expression and Printing 1、命令格式
[Shell] 纯文本查看 复制代码 1
grep [options](选项) "pattern"(模式) /path/to/file (文件) 2、命令选项
[Shell] 纯文本查看 复制代码
-i查找内容时忽略大小写(Ignore Case)
-v反转查找(in Vert)
--color=auto:结果匹配内容带颜色显示,默认为红色
export GREP_COLOR='01;36' 颜色可自己更改
-v:反向选取,只显示不符合模式的行;
-o:只显示配模式匹配的字符串,而不是整个行;
-i:不区分字符大小写
-A #:显示匹配到行时,顺带显示其后面的#个行;
-B #:前面的#行;
-C #:前后的#行;
-E:调用扩展正则表达式;
grep -E =egrep
3、元字符
元字符:*,?,不表示字符本身的意义,而是用于额外功能性的描述;
[Shell] 纯文本查看 复制代码
^:锚定行首的符合条件的内容,用法格式"^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
[Shell] 纯文本查看 复制代码
.:任意单个字符
[]:指定范围内的单个字符
[^]:指定范围外的单个字符
*:其前面的字符任意次
+:匹配其前面的字符至少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地址有两种方式
[Shell] 纯文本查看 复制代码
[iyunv@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
|