007 Linux Shell 入门教程(七):文本处理神器 grep、sed、awk 入门
在 Linux 系统中,文本就是数据。要高效地操作日志、配置文件、或批量处理数据,你必须掌握三个经典命令:grep、sed、awk。
它们是系统管理员、数据分析师、运维工程师的“瑞士军刀”。
一、grep:文本搜索专家
1. 基本用法
grep "关键词" 文档名
示例:
grep "ERROR" /var/log/nginx/error.log
2. 常用选项
选项 | 作用 |
-i | 忽略大小写 |
-v | 取反,显示不匹配的行 |
-n | 显示匹配行的行号 |
-r | 递归搜索目录 |
-E | 支持扩展正则表达式 |
示例:
grep -i "error" app.log
grep -v "DEBUG" log.txt
grep -rn "TODO" ~/project/
二、sed:流编辑器,适合替换与删除
sed 是一种按行处理的文本编辑器,可用于批量替换、插入、删除文本内容。
1. 替换文本
sed 's/原文/新文/' 文档名
默认只替换每行第一个匹配项。
示例:将 file.txt 中的 "cat" 改为 "dog"
sed 's/cat/dog/' file.txt
替换所有匹配:
sed 's/cat/dog/g' file.txt
2. 原地修改文件(注意备份!)
sed -i 's/cat/dog/g' file.txt
加 -i.bak 可自动备份原文件:
sed -i.bak 's/foo/bar/g' config.cfg
3. 删除行
sed '2d' file.txt # 删除第2行
sed '/pattern/d' file.txt # 删除包含关键词的行
三、awk:格式化提取与字段处理专家
awk 以行为单位,按字段处理文本,适合从结构化文本中提取特定列、计算数值等。
1. 基本语法
awk '模式 {动作}' 文档名
2. 示例:提取第1列
awk '{print $1}' data.txt
默认按空格或制表符分隔。
3. 示例:提取用户名与登录时间
who | awk '{print $1, $3}'
4. 使用分隔符(如 CSV 文件)
awk -F ',' '{print $2}' file.csv
-F 指定分隔符为逗号。
5. 条件判断
awk '$3 > 80 {print $1, $3}' scores.txt
表示:输出第3列大于80的行的第1列和第3列。
四、三者对比总结
工具 | 适合场景 | 强项 | 语法难度 |
grep | 搜索关键词 | 过滤/定位 | 低 |
sed | 批量修改内容 | 替换/删除行 | 中 |
awk | 提取/分析字段 | 列处理/格式化 | 高 |
五、综合练习示例
- 提取所有包含“error”的日志行并保存到新文件:
grep -i "error" system.log > error_lines.log
- 将脚本中的 "localhost" 全部替换成 "127.0.0.1":
sed -i 's/localhost/127.0.0.1/g' script.sh
- 从 CSV 文件中提取第二列(用户 ID):
awk -F ',' '{print $2}' users.csv
- 统计当前运行进程的数量:
ps aux | awk 'END {print NR-1}'
- 提取 /etc/passwd 中用户名和默认 shell:
awk -F ':' '{print $1, $7}' /etc/passwd
六、小结
工具 | 精通方向 | 快速记忆法 |
grep | 搜索匹配 | “找” |
sed | 内容替换 | “改” |
awk | 提取/分析 | “提” |
掌握这三把“文本处理神器”,你就能轻松驾驭日志分析、数据清洗、配置修改等常见任务!
下一篇预告:
Linux Shell 入门教程(八):任务调度与自动化(cron 与 crontab)
下一节,我们将学习如何让脚本自动运行,使用 cron 实现任务定时调度,打造无人值守的自动化系统。