正则表达式是这样解释的:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,抑或查询某个日志文件分析其内容,都会用到正则表达式。
grep / egrep(Globally search a Regular Expression and Print)
语法: grep [-cinvABC] 'word' filename
-c :打印符合要求的行数
-i :忽略大小写
-n :在输出符合要求的行的同时连同行号一起输出
-v :打印不符合要求的行
-r:遍历所有行
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行
-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行
例如:
1.过滤出带有某个关键词的行并输出行号
[root@greg-01 ~/grep]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
2.过滤不带有某个关键词的行,并输出行号
[root@greg-01 ~/grep]# grep -nv 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
21:greg:x:1000:1006::/home/greg:/bin/bash
22:greg2:x:1001:1008::/home/greg2:/bin/bash
3.过滤出所有包含数字的行
grep '[0-9]' /etc/inittab
4.过滤出所有不包含数字的行
grep -v '[0-9]' /etc/inittab
5.把所有以 '#' 开头的行去除
grep -v '^#' /etc/inittab
6.
去除所有空行和以 '#' 开头的行
grep -v '^#' /etc/crontab |grep -v '^$'
在正则表达式中, "^" 表示行的开始, "$" 表示行的结尾,那么空行则可以用 "^$" 表示
例如:打印出不以英文字母开头的行。
'[ ]' 的应用,如果是数字的话就用[0-9]这样的形式,当然有时候也可以用这样的形式[15]即只含有1或者5,注意,它不会认为是15。如果要过滤出数字以及大小写字母则要这样写[0-9a-zA-Z]。另外[ ]还有一种形式,就是[^字符] 表示除[ ]内的字符之外的字符。
7.过滤任意一个字符与重复字符
. 表示任意一个字符,上例中,就是把符合r与o之间有两个任意字符的行过滤出来, * 表示零个或多个前面的字符。
'ooo*' 表示oo, ooo, oooo ... 或者更多的 'o'
'.*' 表示零个或多个任意字符,空行也包含在内。
8.指定要过滤字符出现的次数
{ },其内部为数字,表示前面的字符要重复的次数。上例中表示包含有两个o 即 'oo' 的行。注意,{ }左右都需要加上脱义字符 '\', 另外,使用{ }我们还可以表示一个范围的,具体格式是 '{n1,n2}' 其中n1<n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次。
egrep用法
1 筛选一个或一个以上字符 egrep 'o+' passwd
筛选两个字符egrep 'o{2}' passwd
2.筛选零个或一个前面的字符 egrep 'o?' passwd
3.筛选字符串1或者字符串2
egrep 'aaa|111|ooo' passwd
4.egrep中( )的应用
egrep 'r(oo)|(at)o' passwd
用( )表示一个整体,把包含rooo或者rato的行过滤出来
例如(oo)+就表示1个 'oo' 或者多个 'oo'