在Linux中,ls *project*
和ls | grep project
都能筛选文件名,但底层逻辑和适用场景完全不同。
1. 对比表
特性 | ls *project* |
ls | grep project |
---|---|---|
作用阶段 | Shell解析阶段(命令执行前) | 命令执行后的文本过滤(管道处理) |
匹配对象 | 直接匹配文件名 | 匹配ls 输出的文本(包括非文件名信息) |
语法规则 | 通配符语法(* 、? 、[] ) |
正则表达式(. 、* 需转义或按规则使用) |
性能 | 高效(仅列出匹配文件) | 较低(需列出所有文件再过滤) |
2. 典型场景对比
匹配文件名中的“project”
ls *project*
仅输出**文件名包含“project”**的文件。
ls | grep project # 会匹配`ls`输出结果中**任意位置含“project”的文本行**(包括文件权限、时间戳等)
3. 共性
- 符号一样但含义不同
- 通配符中的
*
表示任意数量字符。 - 正则中的
*
表示前导字符重复0次或多次(如a*
匹配“a”、“aa”)。
- 通配符中的
- 可组合使用
# 先通配符缩小范围,再用`grep`二次过滤 ls *.log | grep 'error' # 筛选.log文件中含“error”的文件名