Linux通配符的用法

在Linux中,通配符是代表一个或多个字符的特殊符号。通常用于匹配文件或目录,而正则表达式常用于匹配文件内容。

*:匹配0个或多个字符

1
2
3
4
5
6
7
8
9
ls /etc/*.conf  # 查找/etc/目录下所有以.conf结尾的文件
/etc/adduser.conf /etc/deluser.conf /etc/host.conf /etc/logrotate.conf /etc/pnm2ppa.conf /etc/sudo.conf /etc/xattr.conf
/etc/apg.conf /etc/e2scrub.conf /etc/kernel-img.conf /etc/mke2fs.conf /etc/resolv.conf /etc/sudo_logsrvd.conf
/etc/appstream.conf /etc/fprintd.conf /etc/kerneloops.conf /etc/mongod.conf /etc/rsyslog.conf /etc/sys_config.conf
/etc/brltty.conf /etc/fuse.conf /etc/ld.so.conf /etc/nftables.conf /etc/rygel.conf /etc/sysctl.conf
/etc/ca-certificates.conf /etc/gai.conf /etc/libao.conf /etc/nsswitch.conf /etc/sensors3.conf /etc/ucf.conf
/etc/debconf.conf /etc/hdparm.conf /etc/libaudit.conf /etc/pam.conf /etc/smi.conf /etc/usb_modeswitch.conf
ls /etc/k* # 查找/etc/目录下所有以k开头的文件
/etc/kernel-img.conf /etc/kerneloops.conf

?: 匹配任意一个字符

1
2
ls /etc/fsta?  # 查找/etc/目录下所有以fsta开头,后面跟着一个任意字符,然后以.conf结尾的文件
/etc/fstab

[]: 匹配方括号内的任意一个字符

1
2
3
4
5
6
7
8
9
ls /etc/[ab]*.conf  # 查找/etc/目录下所有以a或b开头的.conf文件
/etc/adduser.conf /etc/apg.conf /etc/appstream.conf /etc/brltty.conf
ls /etc/[!abc]*.conf # 查找/etc/目录下所有不以a、b或c开头的.conf文件
/etc/debconf.conf /etc/fuse.conf /etc/kernel-img.conf /etc/libaudit.conf /etc/nftables.conf /etc/resolv.conf /etc/smi.conf /etc/sysctl.conf
/etc/deluser.conf /etc/gai.conf /etc/kerneloops.conf /etc/logrotate.conf /etc/nsswitch.conf /etc/rsyslog.conf /etc/sudo.conf /etc/ucf.conf
/etc/e2scrub.conf /etc/hdparm.conf /etc/ld.so.conf /etc/mke2fs.conf /etc/pam.conf /etc/rygel.conf /etc/sudo_logsrvd.conf /etc/usb_modeswitch.conf
/etc/fprintd.conf /etc/host.conf /etc/libao.conf /etc/mongod.conf /etc/pnm2ppa.conf /etc/sensors3.conf /etc/sys_config.conf /etc/xattr.con
ls /etc/[a-c]*.conf # 查找/etc/目录下所有以a到z范围内的任意一个字符开头的.conf文件
/etc/adduser.conf /etc/apg.conf /etc/appstream.conf /etc/brltty.conf /etc/ca-certificates.conf

注意:在Z Shell中,!是一个特殊字符,用于引用历史命令,所以运行ls /etc/[!abc]*.conf时,zsh会尝试找到一个历史命令,例如,该命令可能是以”abc”开头,由于它无法找到这样的命令,会返回”event not found”的错误。因此建议在bash中运行该命令。

{}: 匹配花括号内的任意一个字符以及生成组合序列

1
2
3
4
5
6
7
ls /etc/{a,b,c}*.conf  # 查找/etc/目录下所有以a、b或c开头的.conf文件
/etc/adduser.conf /etc/apg.conf /etc/appstream.conf /etc/brltty.conf /etc/ca-certificates.conf
ls /etc/{a..c}*.conf # 查找/etc/目录下所有以a到c范围内的任意一个字符开头的.conf文件
/etc/adduser.conf /etc/apg.conf /etc/appstream.conf /etc/brltty.conf /etc/ca-certificates.conf
touch {1..5}.txt # 生成1到5的txt文件
ls {1..5}.txt # 查找1到5的txt文件
1.txt 2.txt 3.txt 4.txt 5.txt

总结

通配符 含义 实例
* 匹配0个或多个字符 a* 以a开头的任意文件
b*.txt 以b开头,中间有任意数量个字符,以.txt结尾的文件
? 匹配任意单个字符 a?.txt 以a开头,中间有任意单个字符,以.txt结尾的文件
[] 匹配方括号内的任意单个字符 [abc]* 以a、b或c开头,以任意字符结尾的文件
[a-z] 匹配a到z范围内的任意一个字符, 表示范围,只能用于查找文件,不能用于创建文件 [a-z]* 以a到z范围内的任意一个字符开头,以任意字符结尾的文件
[!] 匹配不在方括号内的任意单个字符 [!abc]* 不以a、b或c开头的任意文件
{a,b,c}, {a..z} 以逗号分隔时表示单个字符,以两个句点分隔时表示范围。可用于查找和创建文件 {a,b,c}* 以a、b或c开头,以任意字符结尾的文件
{a..z}* 以a到z范围内的任意一个字符开头,以任意字符结尾的文件
touch {1..5}.txt 生成1到5的txt文件