在 Linux 中,“模糊匹配”通常指的是通配符(Globbing)或正则表达式(Regular Expressions)的使用,具体取决于你是在文件系统中查找文件,还是在文本内容中搜索。
以下是 Linux 中常见的几种“模糊匹配”场景及用法:
文件系统中的模糊匹配(通配符 Globbing)
当你使用 ls、cp、rm、find 等命令时,Shell 会自动将通配符展开为匹配的文件名。
常用通配符:
| 通配符 | 含义 | 示例 |
|---|---|---|
| 匹配任意数量的字符(包括零个) | .txt 匹配所有 .txt 文件 |
|
| 匹配单个字符 | file?.txt 匹配 file1.txt, fileA.txt |
|
[...] |
匹配括号内的任意一个字符 | file[1-3].txt 匹配 file1.txt, file2.txt, file3.txt |
[!...] 或 [^...] |
匹配不在括号内的字符 | file[!0-9].txt 匹配非数字结尾的文件 |
示例:
# 列出所有以 "log" 开头,任意后缀的文件 ls log # 列出所有包含 "test" 的文件 ls test # 列出所有以 a 或 b 开头的 .txt 文件 ls [ab].txt
⚠️ 注意:通配符默认
不匹配隐藏文件(以 开头的文件),如果需要匹配隐藏文件,需使用
shopt -s dotglob或在通配符中显式包含 。
中的模糊匹配(正则表达式)
当你使用 grep、sed、awk 等工具时,使用的是正则表达式(Regex),功能更强大。
常用正则元字符:
| 符号 | 含义 | 示例 |
|---|---|---|
| 匹配任意单个字符 | a.c 匹配 abc, a1c, a c |
|
| 匹配前一个字符 0 次或多次 | abc 匹配 ac, abc, abbc |
|
| 匹配前一个字符 1 次或多次 | ab+c 匹配 abc, abbc(不匹配 ac) |
|
| 匹配前一个字符 0 次或 1 次 | ab?c 匹配 ac, abc |
|
^ |
匹配行首 | ^error 匹配以 error 开头的行 |
| 匹配行尾 | error$ 匹配以 error 结尾的行 |
|
[] |
字符集合 | [aeiou] 匹配任意元音字母 |
| 分组 | (abc)+ 匹配 abc, abcabc |
|
| 或逻辑 | foo|bar 匹配 foo 或 bar |
示例:
# 搜索包含"error" 的行(精确匹配) grep "error" logfile.txt # 搜索以 "error" 开头,后跟任意字符的行 grep "^error." logfile.txt # 搜索包含 "error" 或 "warning" 的行 grep -E "error|warning" logfile.txt # 使用扩展正则表达式(-E 或 egrep) grep -E "ab+c" logfile.txt
高级模糊匹配工具
✅ grep 的 -i 和 -w 选项
-i:忽略大小写(模糊匹配大小写)-w:只匹配完整单词
grep -i "error" logfile.txt # 匹配 Error, ERROR, error 等 grep -w "test" logfile.txt # 只匹配独立的 "test",不匹配 "testing"
✅ find 命令中的 -name 和 -regex
# 使用通配符查找文件 find /path -name ".log" # 使用正则表达式查找文件(GNU find) find /path -regex "..log|..txt"
✅ ag (The Silver Searcher) 或 ripgrep (rg)
比 grep 更快,适合大规模代码库搜索,支持模糊匹配插件。
# 使用 ripgrep 进行模糊搜索 rg "error" . # 使用 ag 进行模糊搜索 ag "error" .
✅ fzf (模糊查找器)
交互式模糊匹配工具,常用于终端中快速查找文件、命令或历史。
# 安装后使用 fzf # 结合 find 使用 find . -type f | fzf
编程中的模糊匹配(如 Python)
如果你是在脚本中进行模糊匹配,可以使用:
Python 示例:
import fnmatch import re # 1. 使用 fnmatch(类似 Shell 通配符) fnmatch.filter(['file1.txt', 'file2.log', 'test.txt'], '.txt') # 输出: ['file1.txt', 'test.txt'] # 2. 使用 re(正则表达式) re.search(r'error', 'This is an ERROR message', re.IGNORECASE)
总结建议
| 场景 | 推荐工具 | 匹配方式 |
|---|---|---|
| 查找文件名 | ls, find |
通配符 , |
| 搜索文本内容 | grep, rg |
正则表达式 |
| 交互式快速查找 | fzf |
模糊算法(Fuzzy Matching) |
| 忽略大小写 | grep -i |
大小写不敏感匹配 |
| 完整单词匹配 | grep -w |
单词边界匹配 |
如果你有具体的匹配需求(“我想查找所有包含 ‘abc’ 但不包含 ‘def’ 的文件”),可以提供更多细节,我可以给出更精确的命令。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/476388.html



