核心过滤工具及用法
grep
:文本搜索利器
-
基础语法:
grep [选项] "模式" 文件名
-
高频场景:
# 搜索包含"error"的行(区分大小写) grep "error" /var/log/syslog # 忽略大小写搜索 grep -i "warning" app.log # 显示匹配行及后3行(上下文) grep -A 3 "critical" system.log # 反向匹配(显示不含"success"的行) grep -v "success" output.txt
awk
:字段处理专家
-
按列提取数据:
awk '{print $列号}'
# 提取日志第1列(时间戳)和第4列(状态码) awk '{print $1,$4}' access.log # 根据条件过滤(状态码500的请求) awk '$4 == 500 {print $0}' access.log
-
高级用法:统计字段值
# 统计不同状态码出现次数 awk '{count[$4]++} END {for(code in count) print code, count[code]}' access.log
sed
:流编辑器(替换/删除行)
- 删除含特定关键词的行:
# 删除所有含"debug"的行 sed '/debug/d' config.conf
- :
# 将"old_text"替换为"new_text" sed 's/old_text/new_text/g' file.txt
组合命令实现复杂过滤
场景1:提取Nginx日志中状态码为404的IP地址
grep " 404 " access.log | awk '{print $1}' | sort | uniq -c
grep
先过滤404行 →awk
提取IP列 →sort
排序 →uniq -c
统计重复IP次数
场景2:实时监控日志并高亮关键词
tail -f app.log | grep --color=auto -E "error|fail"
tail -f
实时输出日志 →grep -E
用正则匹配多个关键词并高亮
进阶工具推荐
-
ag
(The Silver Searcher)
比grep
更快的代码搜索工具,自动忽略版本控制文件:ag "function_name" /path/to/code
-
jq
(JSON处理器)
过滤JSON文件内容(如API响应):curl http://api.example.com/data | jq '.results[] | select(.value > 100)'
最佳实践与注意事项
-
正则表达式优化
- 简单匹配用
fgrep
(grep -F
)速度更快 - 复杂模式用
-E
启用扩展正则(避免大量转义符)
- 简单匹配用
-
处理大文件技巧
- 用
less
或head
先预览结构:head -n 100 bigfile.log | grep "pattern"
- 避免全文件扫描:
grep -m 100 "error"
匹配100行后停止
- 用
-
安全性提醒
- 过滤敏感信息时使用明确参数边界,防止文件名被解析为选项:
grep "password" -- *.conf # 安全做法
- 过滤敏感信息时使用明确参数边界,防止文件名被解析为选项:
掌握 grep
、awk
、sed
三大核心工具,配合管道符 组合使用,可解决90%的文本过滤需求,对于结构化数据(如JSON/CSV),优先选用 jq
或 awk
按字段处理,始终通过 man [命令]
(如 man grep
)查阅手册获取更高级用法。
引用说明基于Linux核心工具官方手册(GNU Grep 3.8, Awk 5.1, Sed 4.8)及开源社区最佳实践整理,遵循POSIX标准,确保跨发行版(Ubuntu/CentOS等)通用性,实战示例经Ubuntu 22.04 LTS环境验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9315.html