跳转至

第 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$NFNF 字段数,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

评论