Shell提供了一套完整的字符串匹配规则。我们在使用find,ps等等命令或者编写脚本时,经常会用到字符串的模糊匹配功能。
常用的特殊字符:
* 匹配文件名中的任何字符串,包括空字符串。
? 匹配文件名中的任何单个字符。
[...] 匹配[ ]中所包含的任何字符。
[!...] 匹配[ ]中非感叹号!之后的字符。
使用*匹配所有字符串
*号可以放在字符串中可以充当任何字符串来用作模糊匹配。包括字符串开头,中间和结束。
# 放在字符串末尾匹配特定开头的字符串
$ ls app*
# 匹配app applist app_tapes app123
# 放在字符串开头匹配特定特定结尾的字符串
$ ls *app
# 匹配app 123app listapp tapes_app
# 放在字符串中间匹配特定开头和结尾的字符串
$ ls app*dir
# 匹配appdir app123dir app_tapesdir
使用?匹配单个任意字符
?可以匹配单个任何字符。可以放在字符串的任何位置。
$ ls *.??.txt
# 匹配 app.rt.txt app123.12.txt ap_._q.txt
使用[...]和[!...]匹配和排除特定的字符串
# 匹配io开头的文件
$ ls [io]*
# 匹配log.开头,后面跟随一个数字,然后可以跟任意字符串的文件
$ ls log.[0-9]*
# 匹配log.开头,后面跟随一个非数字,然后可以跟任意字符串的文件
$ ls log.[!0-9]*
# 匹配大写字母开头
$ ls [A-Z]*
# 匹配小写字母开头
$ ls [a-z]*
# 匹配数字开头
$ ls [0-9]*