【Linux进阶篇】从基础到实战:grep高亮、sed流编辑、awk分析,全场景覆盖


🍃 予枫个人主页
📚 个人专栏 : 《Java 从入门到起飞》《读研码农的干货日常

💻 Debug 这个世界,Return 更好的自己!


引言

作为程序员,日常工作中难免要和日志、配置文件打交道------筛选特定内容、批量修改字段、提取关键信息,这些重复又繁琐的操作,耗时又费力。而Linux文本处理三剑客(grep、sed、awk)+管道命令,正是解决这些痛点的"神器"。不用复杂代码,几行命令就能搞定大部分文本处理需求,今天就带大家从基础到实战,吃透这组组合拳,提升工作效率!

文章目录

一、文本处理三剑客核心认知

文本处理三剑客(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选项,匹配到的内容会自动高亮,查看更直观;

    bash 复制代码
    grep --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:负责"分析",提取字段、统计数据;
  • 管道:负责"联动",串联多个命令,提升处理效率。

掌握这些工具,不需要复杂的脚本,几行命令就能搞定大部分文本处理场景,无论是日志排查、配置修改,还是数据提取,都能大幅提升工作效率。建议大家多动手练习实战案例,将常用命令记下来,形成自己的"命令手册"。


✨ 最后求个点赞+收藏!如果这篇文章帮你解决了文本处理的痛点,欢迎评论区留言分享你的常用命令,一起交流进步~

相关推荐
Sheep Shaun1 小时前
揭开Linux的隐藏约定:你的第一个文件描述符为什么是3?
linux·服务器·ubuntu·文件系统·缓冲区
Tfly__1 小时前
在PX4 gazebo仿真中加入Mid360(最新)
linux·人工智能·自动驾驶·ros·无人机·px4·mid360
陈桴浮海1 小时前
【Linux&Ansible】学习笔记合集二
linux·学习·ansible
生活很暖很治愈2 小时前
Linux——环境变量PATH
linux·ubuntu
?re?ta?rd?ed?2 小时前
linux中的调度策略
linux·运维·服务器
深圳市九鼎创展科技2 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
hweiyu002 小时前
Linux 命令:tr
linux·运维·服务器
Trouvaille ~2 小时前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
allway22 小时前
基于华为taishan200服务器、arm架构kunpeng920 cpu的虚拟化实战
linux·运维·服务器