Shell中的文本过滤命令-grep

一.grep的作用
全称:Global search regular expression and print out the line
全面搜索研究正则表达式并显示出来
作用:grep命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到行。由正则表达式或者字符及基本文本字符所编写的过滤条件
二.grep的使用
1.使用命令
-i ##忽略字母大小写
-v ##条件取反
-c ##统计匹配行数
-q ##静默,无任何输出
-n ##显示匹配结果所在的行号
2.字符的匹配位置设定
^关键字 ##以此关键字开头的
关键字$ ##以此关键字结尾的
<关键字 ##此关键字前无任何字符的
关键字> ##此关键字后无任何字符的
<关键字> ##此关键字前后均无字符的

[root@dns-server mnt]# vim passwd
[root@dns-server mnt]# cat 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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ROOT::test:test
test:root:test
test:test:root
gdiewufhrootbvkjsdv
[root@dns-server mnt]# grep root passwd  ##筛选含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:test:root
gdiewufhrootbvkjsdv
[root@dns-server mnt]# grep -E "\<root" passwd  ##筛选root前无任何字符的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:test:root
[root@dns-server mnt]# grep -E "^root" passwd  ##筛选以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@dns-server mnt]# grep -E "root$" passwd  ##筛选以root结尾的行
test:test:root
[root@dns-server mnt]# grep -E "^root|root$" passwd -v  ##筛选以root开头和结尾行的反向,即不含root或者root在中间的行
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ROOT::test:test
test:root:test
gdiewufhrootbvkjsdv
[root@dns-server mnt]# grep root passwd | grep -E "^root|root$" -v  ##筛选root在中间的行
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
gdiewufhrootbvkjsdv
[root@dns-server mnt]# grep -E "\<root" passwd | grep -E "^root|root$" -v  ##筛选root前无任何字符并且root在中间的行
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
[root@dns-server mnt]# grep -i root passwd  ##筛选含root的行包含大写ROOT
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT::test:test
test:root:test
test:test:root
gdiewufhrootbvkjsdv
[root@dns-server mnt]# grep r..t passwd  ##筛选以r开头t结尾中间有两字符的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:test:root
gdiewufhrootbvkjsdv
[root@dns-server mnt]# grep t..t passwd  ##筛选以t开头以t结尾中间有两字符的行
ROOT::test:test
test:root:test
test:test:root
[root@dns-server mnt]# grep t...t passwd  ##筛选以t开头以t结尾中间有三字符的行;中间几个.就代表几个字符
[root@dns-server mnt]# grep -E "\<root\>" passwd  ##筛选root前后均无字符的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:test:root

三.grep中字符的匹配次数的设定

  • ##字符出现[0-任意次]
    ? ##字符出现[0-1次]
    + ##字符出现[1-任意次]
    {n} ##字符出现n次
    |{m,n} ##字符出现最少m次,最多n次
    {0,n} ##字符出现0-n次
    {m,} ##字符出现至少m次
    (xy){n}xy ##关键字出现n次
    .* ##关键字只见匹配任意字符
[root@dns-server mnt]# vim westos
[root@dns-server mnt]# cat westos
westos
weestos
weeestos
weeeestos
wesesesestos
wstos
wtos
[root@dns-server mnt]# grep -E "e" westos  ##筛出含e的
westos
weestos
weeestos
weeeestos
wesesesestos
[root@dns-server mnt]# grep -E "westos" westos   ##筛选出含westos的
westos
[root@dns-server mnt]# grep -E "we*stos" westos  ##筛选出e出现的次数在0-任意次的
westos
weestos
weeestos
weeeestos
wstos
[root@dns-server mnt]# grep -E "we?stos" westos  ##筛选出e出现次数在0-1次的
westos
wstos
[root@dns-server mnt]# grep -E "we+stos" westos  ##筛选出e次数在1-任意次的
westos
weestos
weeestos
weeeestos
[root@dns-server mnt]# grep -E "we{2}stos" westos  ##筛选出e次数出现2次的
weestos
[root@dns-server mnt]# grep -E "we{2,3}stos" westos  ##筛选出e次数出现2次或3次的
weestos
weeestos
[root@dns-server mnt]# grep -E "we{,3}stos" westos  ##筛选出e的次数在0-3次的
westos
weestos
weeestos
wstos
[root@dns-server mnt]# grep -E "we{3,}stos" westos  ##筛选出e次数在3-任意次的
weeestos
weeeestos
[root@dns-server mnt]# grep -E "w(es)*tos" westos  ##筛选出es出现次数在0-任意次
westos
wesesesestos
wtos
[root@dns-server mnt]# grep -E "w(es)?tos" westos  ##筛选出es出现次数在0-1次的
westos
wtos
[root@dns-server mnt]# grep -E "w(es){3,}*tos" westos  ##es出现3次以上的及出现0-1次的均可以
wesesesestos
wtos
[root@dns-server mnt]# grep -E "w(es){3,}tos" westos  ##筛选出es出现的次数在3次或3次以上的
wesesesestos
[root@dns-server mnt]# grep -E w\(es\)\{3,\}tos westos  ##与上一条相同
wesesesestos

四.grep用法的补充

[root@dns-server mnt]# vim passwd
[root@dns-server mnt]# cat 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:/test/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
operator:x:11:0:operator:/root:/sbin/nologin

grep test passwd ##筛选含test的行列

[root@dns-server mnt]# grep test passwd
lp:x:4:7:lp:/test/spool/lpd:/sbin/nologin

grep -c test passwd ##test字符出现的次数

[root@dns-server mnt]# grep -c test passwd
1

grep -n test passwd ##test字符出现在行数

[root@dns-server mnt]# grep -n test passwd
5:lp:x:4:7:lp:/test/spool/lpd:/sbin/nologin

grep -n2 test passwd ##筛选test行及其前后相邻的两行

[root@dns-server mnt]# grep -n2 test passwd
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
4-adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/test/spool/lpd:/sbin/nologin
6-sync:x:5:0:sync:/sbin:/bin/sync
7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

grep -A2 test passwd ##筛选test所在行及其后两行

[root@dns-server mnt]# grep -A2 test passwd
lp:x:4:7:lp:/test/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

grep -B2 test passwd ##筛选test所在行及其相邻前两行

[root@dns-server mnt]# grep -B2 test passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/test/spool/lpd:/sbin/nologin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值