菜单

Administrator
发布于 2026-10-10 / 1 阅读
0
0

Linux 学习笔记 L12:文本处理三剑客

grep/sed/awk,Linux 文本处理三剑客,日志分析全靠它们。

grep:找

grep "error" /var/log/nginx/error.log
grep -r "password" /etc/          # 递归搜目录
grep -i "Error" app.log          # 忽略大小写
grep -v "^#" config.conf         # 反选:去掉注释行
grep -n "failed" auth.log        # 显示行号
grep -c "404" access.log         # 只计数
grep -E "404|500" access.log     # 扩展正则,多模式
tail -f app.log | grep --line-buffered "ERROR"  # 实时过滤

sed:改(流编辑)

sed 's/old/new/' file            # 每行第一个 old 换 new
sed 's/old/new/g' file           # 全换(g=global)
sed -i 's/old/new/g' file        # -i 直接改文件(不加只预览)
sed -i.bak 's/a/b/g' file        # 改前先备份 .bak
sed '10,20d' file                # 删 10-20 行
sed -n '5p' file                 # 只打印第 5 行

实战:批量改 nginx 端口

sed -i 's/listen 80;/listen 8080;/g' /etc/nginx/sites-enabled/*

awk:算(按列处理)

awk '{print $1}' access.log           # 打印第 1 列
awk '{print $1, $7, $9}' access.log   # 打印 1、7、9 列
awk -F: '{print $1}' /etc/passwd      # -F 指定分隔符为冒号
awk '$9==404 {print $7}' access.log   # 第 9 列是 404,打印第 7 列(URL)
# 统计各状态码数量
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 找访问量最高的 10 个 IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

实战:SSH 爆破日志分析

grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -5

一行揪出爆破最凶的 5 个 IP。grep 找行,awk 取列,sort 排序,uniq 计数,head 取前几——管道串起三剑客。

实战:access.log 统计

# 总请求数
wc -l access.log
# 各 URL 访问量 Top10
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -10
# 404 最多的页面
awk '$9==404 {print $7}' access.log | sort | uniq -c | sort -rn | head -5

小结

工具

定位

常用

grep

找行

grep -rni

sed

改文本

sed -i 's/a/b/g'

awk

按列算

awk '{print $1}'

sort/uniq

排序去重计数

sort \

uniq -c

下一篇 L13:定时任务与日志——cron 表达式详解,journalctl 查日志。


评论