正则表达式
正则表达式通常会跟三个命令来一起使用
grep、sed、awk
三剑客
1、grep
对文本内容进行逐行过滤
grep -[选项] "过滤内容" 文本内容
-v 取反
-o 只匹配需要过滤的内容
-o | wc -l 统计过滤内容的个数
-i 忽略大小写
-n 显示行数
-w 精准匹配
-A 匹配之后若干行
-B 匹配之前若干行
-C 匹配前后若干行
正则表达式
1、元字符
1、匹配单个字符
1) . 表示任意一个字符
2) [] 表示范围内的任意一个字符
[0-9] 匹配任意数字
[A-Z] 匹配任意大写字母
[a-z] 匹配任意小写字母
[a-zA-Z]
[0-9a-zA-Z]
[[:space:]] 表示空格
[[:digit:]] 表示0-9 全部数字,等价于 0123456789,而不是[0123456789]
[[:lower:]] 表示任意小写字母
[[:upper:]] 表示任意大写字母
[[:alpha:]] 表示任意一个字母
[[:alnum:]] 表示任意一个数字或字母
[[:punct:]] 表示任意一个符号
3) [^] 匹配范围以外的任意一个字符
4) * 匹配任意多个字符(0,1,n)
a*b b前面出现任意多个a
ab* a后面出过任意多个b
.* 表示任意长度的任意字符
5) \? 匹配前面得字符最多一次
a\?b 表示 b 或者 ab
6) \{m,n\} 匹配前面的字符最少 m 次最多 n 次 的情况
a\{2.5\}b 匹配a最少2次最多5次
\{m,\} 匹配前面的字符最少 m 次
\{,n\} 匹配前面的字符最多 n 次
7) 位置锚定
^ 表示以某字符开头的行
$ 表示以某字符结尾的行
8) 单词锚定
\<\> 表示匹配某个单词,\<root\>,只匹配root
2、分组
分组:
1) \(\) 表示将括号中的内容视为一个整体
2) \1 表示引用最前面第一个小括号内出现的内容
3) \2 表示引用最前面第二个小括号内出现的内容
3、扩展正则表达式
基本正则表达式:grep [选项] “匹配内容” 文件
扩展正则表达式:grep -E [选项] “匹配内容” 文件
egrep [选项] “匹配内容” 文件
练习
作业
1.从文件/etc/inittab中过滤出包含任意数字的行
grep "[[:digit:]]" /etc/inittab
2.从文件/etc/inittab中过滤出包含两个相同数字的行
grep "\<\([0-9]\)\{2\}\>" /etc/inittab
grep "\<[0-9][0-9]\>" /etc/inittab
3..从文件/etc/inittab中过滤出包含两位数的行
grep "\([0-9]\)\{2\}" /etc/inittab
grep "\([0-9]\)\{2\}" /etc/inittab
4.从文件/etc/inittab中过滤出以#开头的行
grep "^\#" /etc/inittab
5.从文件/etc/inittab中过滤出以非#开头的行
grep "^[^\#]" /etc/inittab
6.从文件/etc/inittab中过滤出以#开,以数字为结尾的行
grep "^\#.*[0-9]$" /etc/inittab
7.从文件/etc/inittab中过滤出以#开,以.为结尾的行
grep "^\#.*\.$" /etc/inittab
8.从文件/etc/inittab中过滤出仅有#的行
grep "^\#*\#$" /etc/inittab
9.从文件/etc/inittab中过滤出以#为开头,并且#后的第一个非空字符是2或4或6的行
grep "^\#[246]" /etc/inittab
10.从文件/etc/passwd中过滤出以/bin/bash结尾行
grep "\/bin\/bash$" /etc/passwd
11从文件/etc/passwd中过滤出以 root 或者 bin 开头的行
grep -E "^root|^bin" /etc/passwd
12.从文件/etc/inittab中过滤出包含单词rc 的行(rcS不能匹配)
grep "rc[^S]" /etc/inittab
grep "rc($|[^S])" -E /etc/inittab
13.从命令ifconfig eth0的执行结果中过滤出1-255之间的整数
ifconfig eth0 | grep -E "(2(5[0-5]|[0-4][0-9]))|[0-1]?[0-9]{1,2}"
14.从命令ifconfig eth0的执行结果中过滤出两位数或者三位数
ifconfig eth0 | grep -E "\<[1-9][0-9]{1,2}\>"
15.从命令ifconfig eth0的执行结果中过滤出类似于xxx.xxx.xxx.xxx的ip格式
ifconfig eth0 | grep -E "([0-9]{1,3})(\.[0-9]{1,3}){3}"
16.从命令ifconfig eth0的执行结果中过滤出合法的ip地址
ifconfig eth0 | grep -E ((2(5[0-5]|[0-4][0-9]))|[0-1]?[0-9]{1,2})(\.((2(5[0-5]|[0-4][0-9]))|[0-1]?[0-9]{1,2})){3}
``