正则表达式
正则表达式(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