
🍃 予枫 :个人主页
📚 个人专栏 : 《Java 从入门到起飞》《读研码农的干货日常》
💻 Debug 这个世界,Return 更好的自己!
引言
作为程序员,日常工作中难免要和日志、配置文件打交道------筛选特定内容、批量修改字段、提取关键信息,这些重复又繁琐的操作,耗时又费力。而Linux文本处理三剑客(grep、sed、awk)+管道命令,正是解决这些痛点的"神器"。不用复杂代码,几行命令就能搞定大部分文本处理需求,今天就带大家从基础到实战,吃透这组组合拳,提升工作效率!
文章目录
- 引言
- 一、文本处理三剑客核心认知
- 二、GREP:文本搜索神器(正则+高亮+排除)
-
- [2.1 基础用法(必记)](#2.1 基础用法(必记))
- [2.2 正则表达式基础(高频用法)](#2.2 正则表达式基础(高频用法))
- [2.3 高亮与排除(实用技巧)](#2.3 高亮与排除(实用技巧))
- 三、SED:流编辑器(配置文件批量修改)
-
- [3.1 核心用法:文本替换(最常用)](#3.1 核心用法:文本替换(最常用))
- [3.2 进阶用法:删除与插入](#3.2 进阶用法:删除与插入)
- 四、AWK:列处理王者(日志字段提取)
-
- [4.1 基础用法:提取指定列](#4.1 基础用法:提取指定列)
- [4.2 进阶用法:条件筛选+统计](#4.2 进阶用法:条件筛选+统计)
- 五、管道命令:串联三剑客,效率翻倍
-
- [5.1 高频组合实战(必练)](#5.1 高频组合实战(必练))
- [5.2 管道使用注意事项](#5.2 管道使用注意事项)
- 六、总结
一、文本处理三剑客核心认知
文本处理三剑客(grep、sed、awk)是Linux系统中最常用的文本处理工具,三者各有侧重、相辅相成,再配合管道命令(|)串联使用,能实现"1+1+1>3"的效果,覆盖日志分析、配置修改、数据提取等80%的文本处理场景。
📌 核心定位(一句话分清三者):
- grep:专注"搜索过滤",相当于文本版"查找",快速筛选符合条件的内容;
- sed:专注"流编辑",相当于文本版"替换/修改",批量处理文件内容;
- awk:专注"列处理/分析",相当于轻量版"Excel",提取字段、统计数据更擅长;
- 管道(|):将前一个命令的输出,作为后一个命令的输入,实现命令联动。
二、GREP:文本搜索神器(正则+高亮+排除)
grep的核心作用是"按条件搜索文本",支持正则表达式,能快速从海量文本中筛选出需要的内容,是日常使用频率最高的命令之一。
2.1 基础用法(必记)
语法:grep [选项] 搜索条件 目标文件
常用基础示例(复制可直接执行):
bash
# 1. 搜索文件test.txt中包含"error"的行
grep "error" test.txt
# 2. 忽略大小写搜索(关键选项-i)
grep -i "Error" test.txt
# 3. 显示匹配行的行号(关键选项-n)
grep -n "error" test.txt
2.2 正则表达式基础(高频用法)
grep最强大的地方的是支持正则,能实现更精准的搜索,以下是程序员高频用到的正则场景:
bash
# 1. 搜索以"error"开头的行(^匹配行首)
grep "^error" test.txt
# 2. 搜索以"done"结尾的行($匹配行尾)
grep "done$" test.txt
# 3. 搜索包含"error"或"warn"的行(|表示或,需加\转义)
grep "error\|warn" test.txt
# 4. 搜索包含数字的行([0-9]匹配单个数字)
grep "[0-9]" test.txt
2.3 高亮与排除(实用技巧)
-
高亮匹配内容:加上
--color=auto选项,匹配到的内容会自动高亮,查看更直观;bashgrep --color=auto "error" test.txt -
排除指定内容:加上
-v选项,反向筛选,排除不需要的行(比如排除注释行);bash# 排除以"#"开头的注释行,只显示有效内容 grep -v "^#" config.conf
💡 小提示:日常日志排查时,grep+正则+高亮,能快速定位错误信息,建议收藏常用命令!
三、SED:流编辑器(配置文件批量修改)
sed是"流编辑器",核心作用是批量修改文本内容------不需要打开文件,直接通过命令就能实现替换、删除、插入等操作,尤其适合批量修改配置文件。
3.1 核心用法:文本替换(最常用)
语法:sed 's/待替换内容/替换后内容/选项' 目标文件
关键选项:g(全局替换,不加则只替换每行第一个匹配项)、i(直接修改文件内容,谨慎使用)
bash
# 1. 将test.txt中"old"替换为"new"(只替换每行第一个)
sed 's/old/new/' test.txt
# 2. 全局替换(每行所有"old"都替换为"new")
sed 's/old/new/g' test.txt
# 3. 直接修改文件内容(加上-i,修改前建议备份文件)
sed -i 's/old/new/g' test.txt
# 4. 替换配置文件中的端口(实战场景:将8080端口改为8081)
sed -i 's/port=8080/port=8081/g' application.conf
3.2 进阶用法:删除与插入
除了替换,sed还能快速删除、插入行,适合清理无效内容:
bash
# 1. 删除包含"注释"的行(d表示删除)
sed '/注释/d' test.txt
# 2. 删除第5行(指定行号删除)
sed '5d' test.txt
# 3. 在第3行前插入一行内容(i表示插入到行前)
sed '3i 这是插入的内容' test.txt
# 4. 在匹配"error"的行后插入一行内容(a表示插入到行后)
sed '/error/a 请及时排查问题' test.txt
💡 注意:使用-i选项直接修改文件时,建议先执行不带-i的命令预览效果,避免误修改!
四、AWK:列处理王者(日志字段提取)
awk是三剑客中功能最强大的工具,核心优势是"列处理"------能将文本按指定分隔符拆分,提取特定列的内容,还能实现简单的统计分析,适合处理结构化日志。
4.1 基础用法:提取指定列
语法:awk -F '分隔符' '{print $列号}' 目标文件
-F选项:指定分隔符(默认是空格或制表符)
bash
# 1. 提取test.txt中第2列内容(默认分隔符)
awk '{print $2}' test.txt
# 2. 提取日志中第3列和第5列(以逗号为分隔符)
awk -F ',' '{print $3,$5}' log.txt
# 3. 实战场景:提取nginx日志中的IP地址(日志以空格分隔,IP是第1列)
awk '{print $1}' access.log
4.2 进阶用法:条件筛选+统计
awk支持条件判断,能筛选出符合条件的列,还能实现简单统计,比如统计IP访问次数:
bash
# 1. 筛选出日志中状态码为200的行(第9列是状态码)
awk '$9==200' access.log
# 2. 统计每个IP的访问次数(按IP分组,统计次数,最后排序)
awk '{print $1}' access.log | sort | uniq -c | sort -nr
# 3. 提取日志中访问时间(第4列)和请求路径(第7列),并格式化输出
awk -F '[' '{print $2}' access.log | awk -F ']' '{print $1,$2}'
💡 小技巧:awk的分隔符可以是单个字符,也可以是正则表达式,复杂场景下非常实用!
五、管道命令:串联三剑客,效率翻倍
管道命令(|)的作用很简单:将前一个命令的输出,作为后一个命令的输入,实现多个命令联动。三剑客配合管道,能解决更复杂的文本处理需求,这也是程序员日常最常用的组合方式。
5.1 高频组合实战(必练)
bash
# 1. 场景1:筛选日志中包含"error"的行,显示行号,且高亮匹配内容
grep -n --color=auto "error" log.txt
# 2. 场景2:筛选出nginx日志中状态码为404的行,提取IP和请求路径,保存到文件
grep "404" access.log | awk '{print $1,$7}' > 404_error.txt
# 3. 场景3:批量修改配置文件,排除注释行,替换端口后保存
grep -v "^#" config.conf | sed 's/port=8080/port=8081/g' > new_config.conf
# 4. 场景4:统计日志中不同状态码的出现次数,按次数降序排列
awk '{print $9}' access.log | sort | uniq -c | sort -nr
5.2 管道使用注意事项
- 管道只能传递"标准输出",如果命令有错误输出(比如权限不足),不会被传递;
- 多个管道可以串联使用,实现更复杂的逻辑,比如"筛选→提取→统计→排序";
- 管道联动时,每个命令的输出格式要和下一个命令的输入格式匹配(比如awk提取的列,要符合后续命令的处理要求)。
六、总结
文本处理三剑客(grep、sed、awk)+管道命令,是Linux程序员必备的文本处理工具,三者各有侧重、相辅相成:
- grep:负责"筛选",快速定位需要的内容;
- sed:负责"修改",批量处理文本内容;
- awk:负责"分析",提取字段、统计数据;
- 管道:负责"联动",串联多个命令,提升处理效率。
掌握这些工具,不需要复杂的脚本,几行命令就能搞定大部分文本处理场景,无论是日志排查、配置修改,还是数据提取,都能大幅提升工作效率。建议大家多动手练习实战案例,将常用命令记下来,形成自己的"命令手册"。
✨ 最后求个点赞+收藏!如果这篇文章帮你解决了文本处理的痛点,欢迎评论区留言分享你的常用命令,一起交流进步~