☰
Linux系统grep、sed 、awk介绍下,使用方法及区别?
2026/10/3 17:09:01 网站建设 项目流程

一、三者核心区别

工具定位主要用途处理单位
grep过滤/搜索快速匹配文本模式行
sed流编辑器替换、删除、插入、修改行(可逐行编辑)
awk报告生成器复杂的格式化、统计、计算字段(列)

简单记忆:

  • grep= 找东西
  • sed= 改东西(非交互式)
  • awk= 算东西(列操作、统计)

二、grep – 强大的文本搜索

基本语法

grep[选项]'模式'文件名

常用选项

选项说明
-i忽略大小写
-v反向匹配(不包含模式的行)
-n显示行号
-r/-R递归搜索目录
-E使用扩展正则(egrep)
-l只显示匹配的文件名
-c只统计匹配的行数

示例

# 基本搜索grep'error'/var/log/syslog# 递归搜索当前目录下的所有 .conf 文件grep-r'Listen'/etc/--include='*.conf'# 输出不包含 # 注释的行grep-v'^#'/etc/nginx/nginx.conf# 匹配单词边界(避免匹配到 contains 中的 in)grep'\bin\b'file.txt# 扩展正则:匹配 error 或 warninggrep-E'error|warning'log.txt

三、sed – 流编辑器(非交互式)

基本语法

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

常用命令

命令说明
s/old/new/替换(默认只替换每行第一个)
s/old/new/g全局替换
d删除行
p打印行(常与 -n 配合)
a追加文本
i插入文本
c替换整行

示例

# 替换(默认只改第一个匹配)sed's/old/new/'file.txt# 全局替换并保存到原文件(-i 直接修改)sed-i's/old/new/g'file.txt# 删除空行sed'/^$/d'file.txt# 删除第2到第5行sed'2,5d'file.txt# 打印第10行(-n 禁止自动打印)sed-n'10p'file.txt# 在匹配行后追加一行sed'/pattern/a\新增内容'file.txt# 用 & 引用匹配到的内容(给数字加括号)echo"hello 123 world"|sed's/[0-9]\+/(&)/'# 输出: hello (123) world

替换分隔符

可以用|、#等避免转义路径:

sed's#/旧路径#/新路径#g'file.txt

四、awk – 文本处理语言

基本语法

awk'条件 {动作}'文件名

内置变量

变量含义
$0整行内容
$1, $2...第1列、第2列…
NF当前行的字段数
NR当前行号
FS输入字段分隔符(默认空格/tab)
OFS输出字段分隔符
RS输入行分隔符(默认换行)

示例

# 打印第1列和第3列awk'{print $1, $3}'file.txt# 指定冒号分隔符(处理 /etc/passwd)awk-F':''{print $1, $6}'/etc/passwd# 打印行号及整行awk'{print NR, $0}'file.txt# 统计第三列的总和awk'{sum += $3} END {print "总和:", sum}'data.txt# 条件过滤:第2列大于100的行awk'$2 > 100'file.txt# 格式化输出awk'{printf "%-10s %5d\n", $1, $2}'file.txt# 匹配正则的行awk'/error/ {print NR, $0}'log.txt# 内置函数:取整、长度awk'{print int($1), length($2)}'file.txt

awk 脚本结构

awk'BEGIN {初始化} 主体处理 {动作} END {收尾}'file

五、实际组合使用案例

1. 从日志中提取特定时间段的错误IP

grep'2025-05-20'app.log|grep'ERROR'|awk'{print $1}'|sort|uniq-c

2. 替换文本中的多个模式

sed-e's/foo/bar/g'-e's/hello/hi/g'file.txt

3. 用 awk 代替 grep + cut

# 传统方式psaux|grepnginx|awk'{print $2}'# 只用 awkpsaux|awk'/nginx/ {print $2}'

4. 修改 CSV 文件并重新格式化

awk-F',''BEGIN{OFS="|"} {print $1, $3, $5}'data.csv

5. 查找某目录下包含特定模式的文件名

ls-l|awk'$9 ~ /\.log$/ {print $9}'# 列出 .log 文件ls-l|sed-n'/\.log$/p'# 同样功能

六、选型建议

场景推荐工具
只想快速看日志里有没有 “error”grep
需要批量替换文件中的某个词sed -i
按列统计、计算、格式化输出awk
多行匹配或上下文(前后几行)grep -A 3 -B 2或awk
跨文件批量修改sed + find
处理 JSON / XML / 复杂结构建议用jq或 Python

三者的正则语法略有差异:

  • grep 默认基础正则,-E启用扩展
  • sed 默认基础正则,-r或-E启用扩展
  • awk 默认扩展正则

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询