正则表达式

正则表达式(Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。

几乎所有开发语言都支持正则表达式,后面学习的python语言里也有正则表达式.

linux里主要支持正则表达式的命令有grep, sed, awk

1 正则表

表达式

说明

示例

[]

括号里的字符任选其一

[abc][0-9][a-z]

[^]

不匹配括号里的任意字符(括号里面的^号为"非",不是开头)

[^abc]表示不是a,不是b,不是c

^[]

以括号里的任意单个字符开头(这里的^是开头的意思)

^[abc]:以a或b或c开头

^[^]

不以括号里的任意单个字符开头

^

行的开头

^root

$

行的结尾

bash$

^$

空行

2 正则表

表达式

功能

[[:alnum:]]

大小写字母与数字

[[:alpha:]]

字母字符(包括大小写字母)

[[:blank:]]

空格与制表符

[[:digit:]]或[0-9] (==常用==)

数字

[[:lower:]]或[a-z] (==常用==)

小写字母

[[:upper:]]或[A-Z] (==常用==)

大写字母

[[:punct:]]

标点符号

[[:space:]]

包括换行符,回车等在内的所有空白

3 正则表

字符

字符说明

示例

*

前导字符出现0次或者连续多次

ab* abbbb

.

除了换行符以外,任意单个字符

ab. ab8 abu

.*

任意长度的字符

ab.* abdfdfdf

{n}

前导字符连续出现n次 (需要配合grep -E或egrep使用)

[0-9]{3}

{n,}

前导字符至少出现n次 (需要配合grep -E或egrep使用)

[a-z]{4,}

{n,m}

前导字符连续出现n到m次 (需要配合grep -E或egrep使用)

o{2,4}

+

前导字符出现1次或者多次 (需要配合grep -E或egrep使用)

[0-9]+

?

前导字符出现0次或者1次 (需要配合grep -E或egrep使用)

go?

( )

组字符

#示例如下,准备一个1.txt文本
# vim 1.txt
boot
boat
rat
rot
root
Root
brot

查找有rat或rot字符的行
# grep r[oa]t 1.txt						
rat
rot
brot

查看非r字符开头,但2-4个字符为oot的行
# grep ^[^r]oot 1.txt
boot
Root

查找有非大写字母与一个o字符连接的行
# grep '[^A-Z]o' 1.txt
boot
boat
rot
root				
Root			# 这个也可以查出来,因为第2-3个字符符合要求
brot

查找不以r和b开头的行
# grep ^[^rb] 1.txt
Root

查找以rot开头以rot结尾的行(也就是这一行只有rot三个字符)
# grep ^rot$ 1.txt
rot

查找.号结尾的字符,需要转义并引号引起来(比较特殊,因为下面就要讲到.号是特殊的元字符)
# grep "\."$  1.txt
brot

#问题: 使用grep输出`/etc/vsftpd/vsftpd.conf`配置文件里的配置(去掉注释与空行)
提示: grep -v取反
别忘了grep -E扩展模式可以实现或
如: grep -E "root|ftp" /etc/passwd

# yum install vsftpd -y
# grep -v ^# /etc/vsftpd/vsftpd.conf |grep -v ^$
# grep -v '^#|^$' /etc/vsftpd/vsftpd.conf