正则介绍:grep和egrep

什么是正则表达式?
正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找、删除、替换特定字符串的处理程序
一、grep
1. grep   过滤文件关键字
[root@localhost grep]# grep 'root' wd.txt        #过滤wd.txt文件中有root的行
root :x:0:0: root :/ root :/bin/bash
operator:x:11:0:operator:/ root :/sbin/nologin
2. grep -c   统计关键字共有多少行
[root@localhost grep]# grep -c 'root' wd.txt      #统计wd.txt文件中有多少带有root的行数
2
3. grep -n   显示关键字所在行的行号
[root@localhost grep]# grep -n 'root' wd.txt      # 显示wd.txt文件中root关键字所在行的行号
1 :root:x:0:0:root:/root:/bin/bash
10 :operator:x:11:0:operator:/root:/sbin/nologin
4. grep -i    不区分大小写
[root@localhost grep]# grep -i 'root' wd.txt          #不区分大小写搜索带有root的行
ROOT t:x:0:0: ROOT :/ ROOT :/bin/bash                            #这里的ROOT为大写
operator:x:11:0:operator:/ root :/sbin/nologin
5. grep -v   取反,过滤出不带关键字的行
[root@localhost grep]# grep -v 'nologin' wd.txt       #过滤出wd.txt中不带nologin的行
root:x:0:0:ROOT:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
lx01:x:1000:1000::/home/lx01:/bin/bash
lx02:x:1001:1001::/home/lx02:/bin/bash
lx03:x:1002:1003::/home/lx03:/bin/bash
mk100:x:1007:1007::/home/mk100:/bin/bash
6. grep -r   遍历目录下所有的文件和子目录,找到带有关键字的文件的行                
[root@localhost grep]# grep -r 'ens33' /etc/             #过滤出/etc/目录下所有文件带有enss33的行
/etc/sysconfig/network-scripts/ifcfg-ens33:NAME=ens33
/etc/sysconfig/network-scripts/ifcfg-ens33:DEVICE=ens33
7. grep -A   A后面接数字,过滤出符合要求的行及下面的n行
[root@localhost grep]# grep -nA2 'root' wd.txt      #过滤出passwd中带root的行,-A2并且把这一行下面的2行也显示出来
1:root:x:0:0:ROOT:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologi
     grep -B   B后面接数字,过滤出符合要求的行及上面的n行
[root@localhost grep]# grep -nB2 'root' wd.txt        #过滤出passwd中带root的行,-B2并且把这一行上面的2行也显示出来
1:root:x:0:0:ROOT:/root:/bin/bash #
--
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
  grep -C   C后面接数字,过滤出符合要求的行及上下n行
[root@localhost grep]# grep -nC2 'root' wd.txt        # 过滤出passwd中带root的行,-C2并且把这一行上下的2行都显示出来
1:root:x:0:0:ROOT:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

二、正则的一些示例
1. grep ' [0-9] '      过滤文件中所有带数字的行
[root@localhost grep]# grep '[0-9]' /etc/passwd      # 过滤出/etc/pass中所有不带数字的行
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
.......
2.  g rep -v ' [0-9] '     过滤出所有不带数字的行
[root@localhost grep]# grep -v '[0-9]' /etc/passwd      #过滤出/etc/pass中所有不带数字的行
3. grep ' ^'             ^表示开始,后面跟字符,可以过滤以你填入的字符开头的行,同样可以使用-v取反
[root@localhost grep]# grep '^r' /etc/passwd          #过滤出/etc/passwd文件中以r开头的行
root:x:0:0:root:/root:/bin/bash
4.  grep ' [ ^ 0-9] '      匹配非数字的字符,^放到方括号[]里面的意思是取非

5.  grep ' ^ [ ^ 0-9] '      匹配非数字开头的行

6.  grep ' r.o '    "."表示任意一个字符
[root@localhost grep]# grep 'r.o' wd.txt
roo t:x:0:0:ROOT:/ roo t:/bin/bash
rto
s rgo
operator:x:11:0:operator:/root:/sbin/nologin
7. grep ' r*o '    "*" 表示匹配*前面的字符,可以重复n次,
[root@localhost grep]# grep 'r*o' wd.txt
roo t:x:0:0:ROOT:/ roo t:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
rt o
srg o
rddfg o
mail:x:8:12:mail:/var/sp oo l/mail:/sbin/nologin
systemd-netw o rk:x:192:192:systemd Netw o rk Management:/:/sbin/n o l o gin
ooooo
8.  grep ' .* '          .和*组合起来表示任意个任意字符,0个也可以,表示全部
[root@localhost grep]# grep '.*' wd.txt
9.  grep ' o\{2\} '   {}在正则里面使用表示范围,直接使用识别不了,需要脱义,不过不想脱义,那么使用加上参数-E也是可以的
1. [root@localhost grep]# grep 'o\{2\}' wd.txt     #表示匹配wd.txt文件中出现两次o的行
    r oo t:x:0:0:ROOT:/r oo t:/bin/bash
    lp:x:4:7:lp:/var/sp oo l/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/r oooo ot:/sbin/nologin
    oooo o
2. [root@localhost grep]# grep -E 'o{2}' wd.txt    #加上-E效果是一样的
    r oo t:x:0:0:ROOT:/r oo t:/bin/bash
    lp:x:4:7:lp:/var/sp oo l/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/r oooo ot:/sbin/nologin
    oooo o

三、egrep
1.  egrep ' o{3} '    egrep是grep的扩展,使用egrep时,特殊字符不需要脱义
[root@localhost grep]# egrep 'o{3}' wd.txt
operator:x:11:0:operator:/r ooo oot:/sbin/nologin
ooo oo
dbus:x:81:81:System message bus:/:/sbin/n ooo login
2. egrep   ' (oo){2} '    使用小括号(),表示一个整体
[root@localhost grep]# grep -E '(oo){2}' wd.txt           #表示两个oo出现两次,那么就是四个o
operator:x:11:0:operator:/r oooo ot:/sbin/nologin
oooo o
3.  egrep ' o+t '      +号前面的字符可以有1个或者多个,不能是0个
[root@localhost grep]# egrep 'o+t' wd.txt
r oot :x:0:0:ROOT:/r oot :/bin/bash
operator:x:11:0:operator:/r ooooot :/sbin/nologin
4.  egrep ' o?t '       ?号前面的字符可以是0个或1个
[root@localhost grep]# egrep 'o?23' wd.txt
23 3sss
5.  egrep ' root|bash '   |表示或者,
[root@localhost grep]# egrep 'root|bash' wd.txt
root:x:0:0:ROOT:/ root :/bin/ bash
lx01:x:1000:1000::/home/lx01:/bin/ bash
lx02:x:1001:1001::/home/lx02:/bin/ bash
lx03:x:1002:1003::/home/lx03:/bin/ bash
mk100:x:1007:1007::/home/mk100:/bin/ bash
6. grep -r --include=         过滤出一个目录下指定含有关键字文档,且含有指定关键字的行
[root@localhost grep]# grep -r --include="passwd" 'root' /etc/
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
把一个目录下,过滤所有*.php文档中含有eval的行
grep -r --include="*.php" 'eval' /data/





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值