目录
1.基本正则符号
正则符号 描述
abc 匹配abc
^ 匹配开头
$ 匹配结尾
[集合] 匹配集合中的任意单个字符
[^集合] 对集合取反
. 匹配任意单个字符
* 匹配前一个字符任意次(包含0次)
.* 匹配任意
\{n,m\} 匹配前一个字符n到m次
\{n,\} 匹配前一个字符至少n次
\{n} 匹配前一个字符n次
2.基本正则的示例
2.0 测试文本
[muten@localhost Compiler]$ cat SimpleSection.c
#include <stdio.h>
int globa1_init_var = 84;
int global_uninit_var;
void func1 ( int i )
{
printf ("%d\n", i ) ;
}
int main(void)
{
static int static_var = 85;
static int static_var2;
int a = 1;
int b;
func1(static_var+static_var2+a+b);
return 0;
}
2.1 匹配特定字符
2.2 匹配开头
2.3 匹配结尾
2.4 匹配集合中的任意单个字符
2.5 对集合取反
2.6 匹配任意单个字符
2.7 匹配前一个字符任意次(包含0次)
2.8 匹配任意
2.9 匹配次数
[root@collect05 log]# grep "receive \[[0-9]\{3\}" AlarmLog20210923.log | head -5
receive [139] events
receive [131] events
receive [149] events
receive [107] events
receive [157] events
3.扩展正则符号
正则符号 描述
+ 匹配前面的字符至少一次
? 匹配前面的字符0或1次
() 组合与保留
| 或者
{n,m} 匹配前面的字符n到m次
{n,} 匹配前面的字符至少n次
{n} 匹配前面的字符n次
grep默认不使用扩展正则,如果想要使用扩展正则需要加-E参数.
grep -E "0{2,3}" /etc/passwd 从/etc/passwd中过滤出包含2个或3个0的行
grep -E "[a-z]+" /etc/passwd 从/etc/passwd中过滤出字少含有1个字母的行
grep -E "s?bin" /etc/passwd 从/etc/passwd中过滤出bin或者sbin字符串的行
grep -E "(root|daemon)" /etc/passwd 从/etc/passwd中过滤出包含root或者daemon字符串的行
echo "ababab" | grep ab 内容都会显示出来,
ababab
echo "ababab" | grep -E "(ab){2}" 内容都会显示出来,但是匹配的是前两个ab
ababab
4.扩展正则的示例
4.0 示例文件
[muten@localhost Compiler]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rtkit:x:499:496:RealtimeKit:/proc:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
pulse:x:498:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:497:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
unbound:x:496:492:Unbound DNS resolver:/etc/unbound:/sbin/nologin
nslcd:x:65:55:LDAP Client User:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
muten:x:500:500:Zhang:/home/muten:/bin/bash
4.1 匹配前面的字符至少一次
4.2 匹配前面的字符0或1次
4.3 组合与保留结合或者一起使用
4.4 组合与保留结合次数一起使用
5.Perl兼容的正则符号
正则符号 描述
\b 匹配单词边界
\w 匹配字母数字及下划线
\W 与\w相反
\s 匹配空白,比如说空格和tab键
\d 匹配数字
\d+ 匹配多个数字
\D 匹配非数字
默认grep不支持Perl正则,如果需要使用Perl正则需要使用-P.
6.Perl兼容正则的示例
6.0 示例文件
[muten@localhost Compiler]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rtkit:x:499:496:RealtimeKit:/proc:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
pulse:x:498:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:497:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
unbound:x:496:492:Unbound DNS resolver:/etc/unbound:/sbin/nologin
nslcd:x:65:55:LDAP Client User:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
muten:x:500:500:Zhang:/home/muten:/bin/bash
6.1 单词边界
grep -P "\bbin\b" /etc/passwd 完全匹配bin
grep -P "\bbin" /etc/passwd 以bin开头
grep -P "bin\b" /etc/passwd 以bin结尾
6.2 过滤所有的字母数字下划线
6.3 匹配非字母数字及下划线
6.4 匹配出所有数字
6.5 匹配出所有非数字的行
6.6 匹配空白
6.7 匹配多个数字
7.使用grep实现精确过滤的方法
使用grep实现精确过滤的五种方法
(1)当被过滤的内容占据一行时
[root@MySQL scripts]# cat oldboy.log
200
0200
2000
[root@MySQL scripts]# grep "\b200\b" oldboy.log
200 #<==正则按单词匹配
[root@MySQL scripts]# grep -w "200" oldboy.log
200 #<==按单词匹配
[root@MySQL scripts]# grep -x "200" oldboy.log
200 #<==按整行匹配
[root@MySQL scripts]# grep "^200$" oldboy.log
200 #<==正则开头结尾匹配,相当于整行匹配
[root@MySQL scripts]# grep -E "\<200\>" oldboy.log
200 #<==扩展正则
(2)当被过滤的内容占据一行的一部分
[root@MySQL scripts]# cat oldboy.log
200 oldboy
0200 oldgirl
2000 littleboy
[root@MySQL scripts]# grep "\b200\b" oldboy.log
200 oldboy
[root@MySQL scripts]# grep -w "200" oldboy.log
200 oldboy
[root@MySQL scripts]# grep -x "200" oldboy.log
#<==按整行匹配,所以没结果
[root@MySQL scripts]# grep -x "200 oldboy" oldboy.log
200 oldboy
[root@MySQL scripts]# grep "^200$" oldboy.log
#<==按整行匹配,所以没结果
[root@MySQL scripts]# grep "^200 oldboy$" oldboy.log
200 oldboy
[root@MySQL scripts]# grep -E "\<200\>" oldboy.log
200 oldboy