Shell脚本常用三大命令:grep、sed、awk 终极指南

掌握Linux文本处理三剑客,轻松玩转日志分析与数据提取!


一、为什么是这三个命令?

在Shell脚本开发中,grepsedawk 被公认为文本处理三剑客:

  • grep:文本搜索利器

  • sed:流编辑器(批量替换/删除)

  • awk:报表生成器(结构化处理)

掌握它们能解决90%的文本处理需求!


二、grep:文本搜索专家

1. 基础搜索

# 在文件中搜索"error"
grep "error" server.log

# 忽略大小写搜索
grep -i "Error" server.log

2. 实用参数大全

参数

作用

示例

-v

反向匹配(排除)

grep -v "debug" app.log

-n

显示行号

grep -n "warning" app.log

-r

递归搜索目录

grep -r "TODO" src/

-A

显示匹配行后的N行

grep -A 3 "Exception" error.log

-B

显示匹配行前的N行

grep -B 2 "Starting" boot.log

-c

统计匹配次数

grep -c "200" access.log

3. 正则表达式实战

# 查找以"2024"开头的行
grep "^2024" logs.txt

# 查找包含"err"或"warn"的行
grep -E "err|warn" system.log

# 查找IP地址
grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" access.log

三、sed:流编辑大师

1. 基础替换

# 替换文件中的"old"为"new" (仅输出到终端)
sed 's/old/new/' file.txt

# 直接修改文件(加-i参数)
sed -i 's/foo/bar/g' config.conf

2. 核心语法解析

s/pattern/replacement/[flags]

标志

作用

g

全局替换

p

打印修改的行

i

忽略大小写

3. 实用技巧

➤ 删除空行
sed '/^$/d' file.txt
➤ 替换指定行
# 替换第5行的内容
sed '5 s/old/new/' data.txt
➤ 范围操作
# 删除10-20行
sed '10,20d' log.txt

# 在匹配行后插入文本
sed '/pattern/a INSERT_TEXT' file
➤ 多命令执行
sed -e 's/foo/bar/' -e '/baz/d' file.txt

四、awk:数据处理神器

1. 基础结构

awk 'pattern {action}' file

2. 核心概念

变量

含义

$0

整行内容

$1

第一列

NF

列数

NR

当前行号

FS

输入字段分隔符

3. 常用操作

➤ 提取特定列
# 打印用户名(第1列)
awk -F: '{print $1}' /etc/passwd
➤ 条件过滤
# 显示第二列大于100的行
awk '$2 > 100' sales.txt
➤ 数据统计
# 计算第三列总和
awk '{sum+=$3} END{print sum}' data.txt

# 统计不同状态码出现次数
awk '{codes[$9]++} END{for(c in codes) print c, codes[c]}' access.log

4. 高级用法

# 自定义输出格式
awk '{printf "User: %-10s UID: %d\n", $1, $3}' /etc/passwd

# 处理CSV文件
awk -F, 'NR>1 {print $2,$5}' data.csv

# 关联多个文件
awk 'NR==FNR{a[$1]=$2; next} {print $0, a[$1]}' map.txt data.txt

五、三剑客组合实战

场景:分析Nginx访问日志

# 1. 提取2024年的500错误
grep "2024" access.log | grep " 500 "

# 2. 删除无用的查询参数
sed 's/?.*//' | sed 's/\?.*//'

# 3. 统计最常出错的URL
awk '{print $7}' | sort | uniq -c | sort -nr | head -10

场景:批量重命名文件

ls *.jpg | sed 's/^/prefix_/' | xargs -I {} mv {} prefix_{}

场景:提取配置文件中有效项

grep -v "^#" config.conf | sed '/^$/d' | awk -F= '{print $1}'

六、命令对比表

任务

grep

sed

awk

文本搜索

✅ 最佳选择

⚠️ 可用

⚠️ 可用

文本替换

❌ 不支持

✅ 最佳选择

⚠️ 可用

列数据处理

❌ 不支持

⚠️ 有限支持

✅ 最佳选择

复杂计算

❌ 不支持

❌ 不支持

✅ 支持

保持原格式

✅ 保持原样

✅ 保持原样

⚠️ 可能改变格式

✨ 黄金法则:


七、学习资源

  1. man grep / man sed / man awk - 原生手册永远是最佳参考

  2. Grymoire三剑客教程- 经典在线教程

  3. 《sed & awk》- O'Reilly经典书籍

立即尝试这个命令测试你的理解:

echo -e "apple 2\norange 5\nbanana 3" | awk '{sum+=$2} END{print "Total:", sum}'

输出:Total: 10


欢迎在评论区分享你的三剑客使用技巧! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhhhhello啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值