9.3-grep命令(下)

本文详细介绍了grep命令中如何过滤出任意一个字符和重复字符,包括点号`.`的用法,以及`*`、`{n}`、`{n,m}`、`+`和`?`等通配符的应用。通过实例展示了如何匹配指定次数的字符,以及egrep中使用`()`进行整体匹配。" 83902955,7699178,决策树算法详解与实现,"['机器学习', '决策树算法', '信息理论', '数据挖掘']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'r.o' 过滤出任意一个字符和重复字符
. 表示任意一个字符。'r.o' 表示把 r 和 o 之间有一个任意字符的行过滤出来。

[root@evan-01 grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@evan-01 grep]# 

对 passwd 文件进行再编辑,再来查看

[root@evan-01 grep]# vi passwd

添加内容如下图,保存退出
在这里插入图片描述
再查看

[root@evan-01 grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
ascavsbkanv:asvka:992:ankanv:rao:jskk
r.o:absck:2737:cnalv
operator:x:11:0:operator:/root:/sbin/nologin
[root@evan-01 grep]#

我们发现,刚才添加的 rao 和 r.o 也都被展示出来了

'oo*' *表示零个或多个 * 前面的字符
oo* 表示 oo、ooo、oooo….或者更多的 O

[root@evan-01 grep]# grep 'oo*' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
ascavsbkanv:asvka:992:ankanv:rao:jskk
r.o:absck:2737:cnalv
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
evan1:x:1000:1000::/home/evan1:/bin/bash
evan2:x:1001:1001::/home/evan2:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1005::/home/user2:/bin/bash
user3:x:1006:1005::/home/user3:/sbin/nologin
user4:x:1007:1007::/home/user4:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/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
[root@evan-01 grep]#

编辑下 passwd 添加更多的 o 再来看效果

[root@evan-01 grep]# vi passwd

添加内容如下图,保存退出
在这里插入图片描述

[root@evan-01 grep]# grep 'oo*' passwd
rooooot:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
ascavsbkanv:asvka:992:ankanv:rao:jskk
r.ooo:absck:2737:cnalv
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
evan1:x:1000:1000::/home/evan1:/bin/bash
evan2:x:1001:1001::/home/evan2:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1005::/home/user2:/bin/bash
user3:x:1006:1005::/home/user3:/sbin/nologin
user4:x:1007:1007::/home/user4:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/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
[root@evan-01 grep]#

我们发现,刚才添加的 rooooot 和 r.ooo 也都被展示出来了

'.*' 表示零个或者多个任意字符,空行也包含在内
会匹配所有的字符

[root@evan-01 grep]# grep '.*' passwd
rooooot:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
ascavsbkanv:asvka:992:ankanv:rao:jskk
r.ooo:absck:2737:cnalv
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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
evan1:x:1000:1000::/home/evan1:/bin/bash
evan2:x:1001:1001::/home/evan2:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1005::/home/user2:/bin/bash
user3:x:1006:1005::/home/user3:/sbin/nologin
user4:x:1007:1007::/home/user4:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/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
[root@evan-01 grep]#

想匹配某一行可以这么用

[root@evan-01 grep]# grep 'user1.*bash' passwd
user1:x:1002:1002::/home/user1:/bin/bash
[root@evan-01 grep]# 

'o\{2\}' 指定要过滤出的字符出现次数

[root@evan-01 grep]# grep 'o\{2\}' passwd
rooooot:x:0:0:root:/root:/bin/bash
r.ooo:absck:2737:cnalv
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@evan-01 grep]# 

这里用到了符号 {} ,内部为数字,表示前面的字符重复的次数。需要强调下,{} 左右都需要加上转义符 \ 。另外,使用 {} 还可以表示一个范围,具体格式为 {n1,n2} ,其中 n1<n2,表示重复 n1 到 n2 次前面的字符,n2 还可以为空,这时表示大于等于 n1 次。

[root@evan-01 grep]# grep 'o\{0,3\}' passwd
rooooot:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
ascavsbkanv:asvka:992:ankanv:rao:jskk
r.ooo:absck:2737:cnalv
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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
evan1:x:1000:1000::/home/evan1:/bin/bash
evan2:x:1001:1001::/home/evan2:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1005::/home/user2:/bin/bash
user3:x:1006:1005::/home/user3:/sbin/nologin
user4:x:1007:1007::/home/user4:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/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
[root@evan-01 grep]# 

grep -E 'o{2}' 指定要过滤出的字符出现次数

[root@evan-01 grep]# grep -E 'o{2}' passwd
rooooot:x:0:0:root:/root:/bin/bash
r.ooo:absck:2737:cnalv
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@evan-01 grep]#
[root@evan-01 grep]# grep -E '(oo){2}' passwd
rooooot:x:0:0:root:/root:/bin/bash
[root@evan-01 grep]#

egrep 'o{2}' 指定要过滤出的字符出现次数

[root@evan-01 grep]# egrep 'o{2}' passwd
rooooot:x:0:0:root:/root:/bin/bash
r.ooo:absck:2737:cnalv
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@evan-01 grep]#

egrep 'o+' 过滤出一个或多个指定的字符

[root@evan-01 grep]# egrep 'o+' passwd
rooooot:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
ascavsbkanv:asvka:992:ankanv:rao:jskk
r.ooo:absck:2737:cnalv
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
evan1:x:1000:1000::/home/evan1:/bin/bash
evan2:x:1001:1001::/home/evan2:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1005::/home/user2:/bin/bash
user3:x:1006:1005::/home/user3:/sbin/nologin
user4:x:1007:1007::/home/user4:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/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
[root@evan-01 grep]#
[root@evan-01 grep]# egrep 'oo+' passwd
rooooot:x:0:0:root:/root:/bin/bash
r.ooo:absck:2737:cnalv
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@evan-01 grep]#
[root@evan-01 grep]# egrep 'ooo+' passwd
rooooot:x:0:0:root:/root:/bin/bash
r.ooo:absck:2737:cnalv
[root@evan-01 grep]# 

不光后面可以跟 + ,后面还可以跟其他字符

[root@evan-01 grep]# egrep 'o+b' passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@evan-01 grep]#

和 grep 不同的是,这里的 egrep 使用的是符号 + ,它表示匹配 1个 或多个 + 前面的字符,这个 + 是不支持被 grep 直接使用的,需要加转义符 \

[root@evan-01 grep]# grep 'oo\+' passwd
rooooot:x:0:0:root:/root:/bin/bash
r.ooo:absck:2737:cnalv
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@evan-01 grep]#

过滤出 0 个或一个指定的字符
? 前面字符出现次数 0 或 1,是 0 的话显示后面的字符,是 1 话就完整显示

[root@evan-01 grep]# egrep 'o?t' passwd
rooooot:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@evan-01 grep]#

过滤出字符串 root 或者字符串 nologin

[root@evan-01 grep]# egrep 'root|nologin' passwd
rooooot:x:0:0:root:/root:/bin/bash
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
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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
user3:x:1006:1005::/home/user3:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/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
[root@evan-01 grep]# 

egrep 中 () 的应用

[root@evan-01 grep]# egrep 'r(oo|at)o' passwd
rooooot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@evan-01 grep]#

这里的 () 表示一个整体,上例中会把包含 rooo 或者 rato 的行过滤出来,另外也可以把 () 和其他符号组合在一起,例如 (oo)+ 就表示 1个或者多个 oo

[root@evan-01 grep]# egrep '(oo)+' passwd
rooooot:x:0:0:root:/root:/bin/bash
r.ooo:absck:2737:cnalv
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@evan-01 grep]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值