Shell中经常用到正则表达式的命令包括grep、sed、awk
用于测试的文件内容
[root@vmtest ~]# vi testfile
Current Network Status
Last Updated: Mon Feb 15 10:55:06 CST 2016
Updated every 90 seconds
Nagios Core 4.1.1 - www.nagios.org
Logged in as admin
I like google
It's Google, not GOOOOOGLE;
基础正则表达式里的一些特殊符号
1)^word 代表以单词word开头的行
[root@vmtest ~]# grep ^I testfile
I like google
It's Google, not GOOOOOGLE;
2)word$ 代表以单词word结尾的行
[root@vmtest ~]# grep s$ testfile
Current Network Status
Updated every 90 seconds
3). 点号代表一个任意字符(包括空格)
[root@vmtest ~]# grep t.G testfile
It's Google, not GOOOOOGLE;
4)\ 斜杠代表转义字符,把所有含有特殊含义的符号都转回它们本身的字符(包括\自身)
[root@vmtest ~]# grep "\." testfile
Nagios Core 4.1.1 - www.nagios.org
5)* 代表前一个字符出现任意次数
[root@vmtest ~]# grep "o*g" testfile
Nagios Core 4.1.1 - www.nagios.org
Logged in as admin
I like google
It's Google, not GOOOOOGLE;
这个例子中,第一行仅命中g,因为o可以出现任意次数,包括0次
6).* 匹配所有字符,包括空行。
[root@vmtest ~]# grep ".*" testfile
Current Network Status
Last Updated: Mon Feb 15 10:55:06 CST 2016
Updated every 90 seconds
Nagios Core 4.1.1 - www.nagios.org
Logged in as admin
I like google
It's Google, not GOOOOOGLE;
7)[] 匹配中括号里所有字符的任意一个
[root@vmtest ~]# grep "[NO]" testfile
Current Network Status
Nagios Core 4.1.1 - www.nagios.org
It's Google, not GOOOOOGLE;
8)[^CHARS] CHARS可以是多个字母或者范围,不匹配范围内的任意字符。注意,这是字母,不是单词
[root@vmtest ~]# grep "[^G]oo" testfile
I like google
9){n,m} 限制前一个字符出现的次数。使用时需要加\转义
[root@vmtest ~]# grep "o\{2,3\}" testfile #当仅使用时,尽管限制了2到3次,但所有都出来了。
I like gooogle
not gooooooogle
It's Google, not GOOOOOGLE;
[root@vmtest ~]# grep "go\{2,3\}gle" testfile #当用其他字母夹着来用,则能实现重复出现的次数
I like gooogle
还有{n,}和{n},前者代表至少出现n次,后者代表准确出现的次数