3.4 文本处理三剑客

3.4 Linux 文本处理三剑客:grep、sed、awk


grep:文本过滤与匹配

grep 用于根据字符串或正则表达式筛选文本内容,是日志分析和配置检查中最常用的工具之一。

常用选项

选项 说明
-i 忽略大小写
-v 反向匹配
-n 显示行号
-c 统计匹配数量
-r 递归搜索目录
-l 仅显示匹配文件
-A N 显示后 N 行
-B N 显示前 N 行
-C N 显示上下文

常见示例

匹配错误日志:

1
grep "ERROR" app.log

忽略大小写搜索:

1
grep -i "failed" app.log

过滤 SSH 配置中的有效内容:

1
grep -Ev '^\s*#|^\s*$' /etc/ssh/sshd_config

递归搜索目录:

1
grep -rn "password" /etc

sed:流式文本编辑器

sed 适用于批量替换、删除、插入和自动化修改文件内容。

基本语法

1
sed [选项] '命令' 文件

常用操作

文本替换

替换首个匹配:

1
sed 's/old/new/' file.txt

替换全部匹配:

1
sed 's/old/new/g' file.txt

直接修改文件:

1
sed -i 's/old/new/g' file.txt

修改前自动备份:

1
sed -i.bak 's/old/new/g' file.txt

删除内容

删除第 3 行:

1
sed '3d' file.txt

删除空行:

1
sed '/^$/d' file.txt

删除匹配内容的行:

1
sed '/error/d' file.txt

插入与追加

在第 3 行前插入:

1
sed '3i\new line' file.txt

在第 3 行后追加:

1
sed '3a\new line' file.txt

awk:按列处理与数据统计

awk 以字段为单位处理文本,特别适合报表生成和数据统计。

常用内置变量

变量 含义
$0 当前整行
$1~$N 第 N 列
NR 当前行号
NF 当前字段数
FS 字段分隔符

基础用法

输出第一列:

1
awk '{print $1}' file.txt

指定分隔符:

1
awk -F: '{print $1,$3}' /etc/passwd

输出带格式内容:

1
awk '{print "User:",$1,"UID:",$3}'

条件过滤

查找 root 用户:

1
awk -F: '$1=="root"' /etc/passwd

筛选 UID 大于等于 1000 的用户:

1
awk -F: '$3>=1000' /etc/passwd

数据统计

计算第一列总和:

1
awk '{sum+=$1} END{print sum}' data.txt

输出行号:

1
awk '{print NR,$0}' file.txt

统计访问量最高的 IP:

1
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

grep、sed、awk 组合应用

实际运维中通常通过管道将三者组合使用。

统计错误日志类型

1
grep "ERROR" app.log | awk -F: '{print $2}' | sort | uniq -c

批量修改 SSH 配置

1
sed -i.bak 's/^#*Port 22/Port 2222/' /etc/ssh/sshd_config

提取普通用户信息

1
awk -F: '$3>=1000 {print $1,$6}' /etc/passwd

提取 IPv4 地址

1
ip addr | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'

三者对比

工具 核心能力 典型场景
grep 过滤与匹配 日志检索、关键字查找
sed 批量编辑 配置修改、文本替换
awk 字段处理与统计 报表生成、数据分析

总结

Linux 文本处理的核心工具为 grep、sed、awk:

  • grep:负责过滤和匹配文本
  • sed:负责批量编辑文本
  • awk:负责字段处理与统计分析

在实际运维工作中,三者结合管道使用能够高效完成日志分析、配置管理、批量处理和自动化脚本开发等任务,是 Linux 管理员和运维工程师必须掌握的基础技能。


3.4 文本处理三剑客
https://blog.sh462li.top/2026/05/28/Linux_learn/3.4 文本处理三剑客/
作者
SHAO
发布于
2026年5月28日
许可协议