基础通配符过滤
通过 Shell 通配符快速匹配文件名:
ls *.txt # 列出所有.txt文件 ls report?.log # 匹配 report1.log, report2.log 等 ls image[0-9].jpg # 匹配 image0.jpg 到 image9.jpg rm -v !(*.bak) # 删除非备份文件(需启用 extglob: shopt -s extglob)
find 命令:递归深度过滤
最强大的文件搜索工具,支持多条件组合:
find ~ -type f -size +10M # 查找主目录大于10MB的文件 # 时间过滤(mtime=修改时间) find /etc -mtime -7 -name "*.conf" # 查找7天内修改的.conf文件 # 权限过滤 find . -perm 644 -exec ls -l {} \; # 查找权限644的文件并列出详情 # 组合删除(谨慎使用) find /tmp -type f -mtime +30 -delete # 删除/tmp中30天前的文件
grep 家族:内容过滤
grep – 基础文本搜索
grep "error" /var/log/syslog # 搜索包含"error"的行 grep -i "warning" app.log # 忽略大小写搜索 grep -r "TODO" ~/projects/ # 递归搜索目录 grep -v "success" transaction.log # 过滤掉含"success"的行
egrep – 扩展正则表达式
egrep "error|fail" system.log # 匹配"error"或"fail" egrep "^[A-Z]" document.txt # 匹配以大写字母开头的行
zgrep – 压缩文件搜索
zgrep "404" /var/log/nginx/access.log.*.gz # 在gzip日志中搜索
awk:结构化数据过滤
处理列式数据(如 CSV、日志):
awk -F':' '{print $1}' /etc/passwd # 提取用户名(以:分隔) awk '$3 > 1000' /etc/passwd # 打印UID大于1000的用户 awk '/GET/ {count++} END {print count}' access.log # 统计GET请求次数
sed:流编辑器过滤
文本替换与提取:
sed -n '/2025-10-01/p' server.log # 打印含日期的行 sed 's/old/new/g' file.txt # 全局替换文本 sed -e '1d' -e '$d' data.csv # 删除首尾行
正则表达式高级技巧
通用匹配规则(适用于 grep/sed/awk):
^
: 行首锚点
grep "^start" file
- : 行尾锚点
grep "end$" file
\d
: 数字(需启用 -P 选项)
grep -P "\d{3}-\d{4}" contacts.txt
- : 任意字符
grep "user:.*active" log
组合命令实战案例
案例 1:分析 Nginx 日志
# 统计每小时请求量 awk '{print $4}' access.log | cut -d: -f2 | sort | uniq -c # 提取 500 错误请求的客户端 IP grep " 500 " access.log | awk '{print $1}' | sort -n | uniq -c
案例 2:批量重命名图片
find . -name "*.JPG" -exec rename 's/\.JPG$/.jpg/' {} \;
案例 3:清理临时文件
find /tmp -type f -user $(whoami) -mtime +7 -exec rm -f {} \;
注意事项
- 权限控制
使用sudo
访问受限目录:
sudo grep "error" /var/log/auth.log
- 防误删风险
执行rm
前用echo
预览:
find . -name "*.tmp" -exec echo "Deleting: {}" \;
- 正则兼容性
- 基础正则(BRE):
grep
默认 - 扩展正则(ERE):
grep -E
或egrep
- Perl 正则(PCRE):
grep -P
- 基础正则(BRE):
- 大文件处理
用less
或tail -f
避免内存溢出
掌握 Linux 文件过滤技术可提升 10 倍运维效率,关键步骤:
- 文件名过滤 →
find
/ 通配符过滤 →grep
/awk
- 流处理 →
sed
/ 管道组合
权威参考来源:
- GNU Coreutils 官方文档:https://www.gnu.org/software/coreutils/
- Linux man 命令手册(终端输入
man grep
/man find
)- POSIX 正则表达式标准:IEEE Std 1003.1-2017
- 《Linux命令行与Shell脚本编程大全》(Richard Blum, Christine Bresnahan 著)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9319.html