5月30日 00:10

grep、sed、awk 和 cut 分别适合处理什么文本问题?

Shell 文本处理常用四件套:grep 负责找行,sed 负责按规则改行,awk 负责按列计算和格式化,cut 负责简单切字段。判断工具时别背命令,先看问题:是搜索、替换、列处理,还是固定分隔符提取。

追问

grep 适合什么?

适合按关键字或正则筛选行。常用参数是 -i 忽略大小写、-n 显示行号、-r 递归目录、-v 反向过滤。

sed 和 awk 怎么区分?

sed 更像“流式编辑器”,擅长替换、删除、打印某段行;awk 更像“小型报表工具”,擅长按字段取列、条件过滤、求和统计。

cut 还有必要学吗?

有。字段分隔很固定时,cut -d ':' -f1 比 awk 更直接。但它不擅长复杂条件,也不适合多空格混合的文本。

实际排日志会怎么组合?

先用 grep 缩小范围,再用 awk 提取字段,最后用 sort | uniq -c 统计。管道里每一步只做一件事,脚本会更好查错。

写段代码

bash
# 查 ERROR,提取第 5 列 IP,统计出现次数 grep "ERROR" app.log | awk '{print $5}' | sort | uniq -c | sort -nr # 批量替换配置 sed -i.bak 's/port=8080/port=9090/' app.conf
标签:Shell