第 19 章 初识 sed 和 gawk¶
约 157 个字 27 行代码 1 张图片 预计阅读时间 1 分钟
流编辑器 sed 按规则逐行处理;gawk 按字段/模式处理列数据。
19.1 sed¶
Bash
sed 's/old/new/' file # 每行首个替换
sed 's/old/new/g' file # 全局
sed 's/old/new/g' -i file # 原地修改
sed -n '2,5p' file # 打印 2–5 行
sed '2d' file # 删第 2 行
sed '/pattern/d' file
sed -f script.sed file # 脚本文件
# 多命令
sed 's/a/A/; s/b/B/' file
script.sed 一行一条命令。
19.2 gawk¶
Bash
gawk '{print $1, $3}' file # 打印第 1、3 字段
gawk -F: '{print $1}' /etc/passwd # 指定分隔符
gawk '/pattern/ {print $0}' file
gawk 'BEGIN {sum=0} {sum+=$1} END {print sum}' file
gawk -f script.awk file
字段变量:$0 整行,$1…$NF,NF 字段数,FS/OFS 分隔符。
BEGIN / END:处理前后各执行一次。
19.3 日志处理实战¶
Bash
# 统计 nginx 404
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn | head
# 提取 JSON 日志某字段(空格分隔)
awk '{print $1, $3}' app.log
# 删空行
sed '/^$/d' file
# 替换并备份
sed -i.bak 's/debug/info/g' config.yaml