Bash 本身并不支持正则表达式,但是 Bash 可以使用一些通配符实现通配功能:

?   代表一个任意字符
*   代表任意个任意字符
[]  需要匹配的字符集合(例如 a-z, A-Z, 0-9 这样)
{}  代表一组表达式的与关系,例如 {[a-h]*.txt,0?.txt}
^   表达式取反
? 代表一个任意字符,例如
ls -l 0?.txt

将会显示以 0 开头 .txt 结尾的文件名是两位的文件,例如 01.txt, 0A.txt, 0@.txt 等等。

* 代表任意个任意字符,跟 ? 的区别仅在于 * 不限制匹配的字符数量。

[] 存放字符集合,例如

ls -l o[a-e].txt

则会匹配 o 开头 .txt 结尾的,表达式所在位置的字母是 a 到 e 的文件。

{} 里面填表达式集合,但是它们将以与关系组合,例如

ls -l {[a-h]*.txt,0?.txt}

则里面 [a-h]*.txt 和 0?.txt 两个表达式匹配到的文件都将会被显示出来。

有几种特殊格式,常用。(外面中括号是范围匹配的)

[a-z],[A-Z],[0-9],[a-z0-9]

[[:upper:]]:任意大写字母A-Z

[[:lower:]]:任意小写字母a-z

[[:alpha:]]:任意大小写字母A-Z,a-z

[[:digit:]]:任意数字,相当于0-9

[[:alnum:]]:任意数字或字母0-9,A-Z,a-z

[[:space:]]:任何会产生空白的字符,包括空格键[Tab]CR等

[[:punct:]]:标点符号,即"'?!;:#$

不常用的:

[[:blank:]]:代表空格键与[Tab][[:graph:]]:代表键盘上面的控制按键,即包括CRLFTabDel[[:graph:]]:除了空格符(空格键与[Tab]按键)外的其他所有按键

[[:xdigit:]]:代表十六进制的数字类型,因此包括0-9,A-F,a-f的数字与字符

练习:

1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位做任意字符的文件或目录;

[root@note1 ~]# ls -d /var/l?[[:lower:]]
/var/lib /var/log
1.
2.
练习1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录;

[root@node1 ~]# ls -d /var/l*[0-9]*[[:lower:]]
/var/l86c

练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录

[root@note1 ~]# touch /etc/6abcd8948x
[root@note1 ~]# ls -d /etc/[0-9]*[^0-9]
/etc/6abcd8948x

练习3:显示/etc目录下,以非字母开头,后面跟一个字母及其它任意字符的文件或目录

[root@note1 ~]# touch /etc/8eabc
[root@node1 ~]# ls /etc/[^[:alpha:]][[:alpha:]]*
[root@note1 ~]# ls -d /etc/[^a-z][a-z]*
/etc/8eabc

练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录

[root@note1 ~]# ls -d /etc/m*[^0-9]
/etc/machine-id                /etc/mke2fs.conf     /etc/mtab
/etc/magic                     /etc/modprobe.d      /etc/my.cnf
/etc/makedumpfile.conf.sample  /etc/modules-load.d  /etc/my.cnf.d
/etc/man_db.conf               /etc/motd
[root@note1 ~]# cp -r /etc/m*[^0-9] /tmp/magedu.com/

练习5:复制/etc目录下,所有以.d结尾的文件或目录至/tmp/magedu.com目录中

[root@node1 ~]# ls -d /etc/*.p        #.d结尾的文件太多了,改成.p结尾的文件
/etc/123.p
[root@node1 ~]# cp -a /etc/*.p /tmp/magedu.com/

5:复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下

[root@note1 ~]# ls -d /usr/share/man/man[0-9]
/usr/share/man/man1  /usr/share/man/man4  /usr/share/man/man7
/usr/share/man/man2  /usr/share/man/man5  /usr/share/man/man8
/usr/share/man/man3  /usr/share/man/man6  /usr/share/man/man9
[root@note1 ~]# cp -r /usr/share/man/man[0-9] /tmp/man/

练习6:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下

[root@note1 ~]# ls -d /etc/[mnrp].conf
/etc/man_db.conf /etc/nsswitch.conf /etc/rsyslog.conf
/etc/mke2fs.conf /etc/resolv.conf
[root@note1 ~]# cp -r /etc/[mnrp]
.conf /tmp/conf.d/

文档更新时间: 2022-06-23 06:30   作者:月影鹏鹏
IT运维支持-AIWALY-月影工作室