正则表达式的学习与应用(一)

本文详细介绍了正则表达式的各种符号及其用法,包括基本正则和扩展正则,如匹配开头和结尾、字符集合、次数限制等,并通过实例展示了如何在grep中使用这些正则进行文本过滤。同时,还探讨了Perl兼容正则表达式,并提供了grep实现精确过滤的各种方法。
摘要由CSDN通过智能技术生成

目录

1.基本正则符号

2.基本正则的示例

2.0 测试文本

2.1 匹配特定字符

2.2 匹配开头

 2.3 匹配结尾

2.4 匹配集合中的任意单个字符

 2.5 对集合取反

2.6 匹配任意单个字符

 2.7 匹配前一个字符任意次(包含0次)

2.8 匹配任意

2.9 匹配次数

3.扩展正则符号

4.扩展正则的示例

4.0 示例文件

4.1 匹配前面的字符至少一次

 4.2 匹配前面的字符0或1次

 4.3 组合与保留结合或者一起使用

 4.4 组合与保留结合次数一起使用

5.Perl兼容的正则符号

6.Perl兼容正则的示例

6.0 示例文件

6.1 单词边界

 6.2 过滤所有的字母数字下划线

 6.3 匹配非字母数字及下划线

 6.4 匹配出所有数字

 6.5 匹配出所有非数字的行

 6.6 匹配空白

6.7 匹配多个数字 

7.使用grep实现精确过滤的方法


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值