当前位置: 首页 > news >正文

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



🍃 予枫:个人主页

📚 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》
💻 Debug 这个世界,Return 更好的自己!

引言

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

文章目录

  • 引言
  • 一、文本处理三剑客核心认知
  • 二、GREP:文本搜索神器(正则+高亮+排除)
    • 2.1 基础用法(必记)
    • 2.2 正则表达式基础(高频用法)
    • 2.3 高亮与排除(实用技巧)
  • 三、SED:流编辑器(配置文件批量修改)
    • 3.1 核心用法:文本替换(最常用)
    • 3.2 进阶用法:删除与插入
  • 四、AWK:列处理王者(日志字段提取)
    • 4.1 基础用法:提取指定列
    • 4.2 进阶用法:条件筛选+统计
  • 五、管道命令:串联三剑客,效率翻倍
    • 5.1 高频组合实战(必练)
    • 5.2 管道使用注意事项
  • 六、总结

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

文本处理三剑客(grep、sed、awk)是Linux系统中最常用的文本处理工具,三者各有侧重、相辅相成,再配合管道命令(|)串联使用,能实现“1+1+1>3”的效果,覆盖日志分析、配置修改、数据提取等80%的文本处理场景。

📌 核心定位(一句话分清三者):

  • grep:专注“搜索过滤”,相当于文本版“查找”,快速筛选符合条件的内容;
  • sed:专注“流编辑”,相当于文本版“替换/修改”,批量处理文件内容;
  • awk:专注“列处理/分析”,相当于轻量版“Excel”,提取字段、统计数据更擅长;
  • 管道(|):将前一个命令的输出,作为后一个命令的输入,实现命令联动。

二、GREP:文本搜索神器(正则+高亮+排除)

grep的核心作用是“按条件搜索文本”,支持正则表达式,能快速从海量文本中筛选出需要的内容,是日常使用频率最高的命令之一。

2.1 基础用法(必记)

语法:grep [选项] 搜索条件 目标文件
常用基础示例(复制可直接执行):

# 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最强大的地方的是支持正则,能实现更精准的搜索,以下是程序员高频用到的正则场景:

# 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选项,匹配到的内容会自动高亮,查看更直观;
    grep--color=auto"error"test.txt
  • 排除指定内容:加上-v选项,反向筛选,排除不需要的行(比如排除注释行);
    # 排除以“#”开头的注释行,只显示有效内容grep-v"^#"config.conf

💡 小提示:日常日志排查时,grep+正则+高亮,能快速定位错误信息,建议收藏常用命令!

三、SED:流编辑器(配置文件批量修改)

sed是“流编辑器”,核心作用是批量修改文本内容——不需要打开文件,直接通过命令就能实现替换、删除、插入等操作,尤其适合批量修改配置文件。

3.1 核心用法:文本替换(最常用)

语法:sed 's/待替换内容/替换后内容/选项' 目标文件
关键选项:g(全局替换,不加则只替换每行第一个匹配项)、i(直接修改文件内容,谨慎使用)

# 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还能快速删除、插入行,适合清理无效内容:

# 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选项:指定分隔符(默认是空格或制表符)

# 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访问次数:

# 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 高频组合实战(必练)

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

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


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

http://www.jsqmd.com/news/356121/

相关文章:

  • 【Linux进阶篇】Linux后台运行避坑指南:nohup、 用法及Systemd守护进程实操
  • wsl中遵循win的代理设置
  • 【开源商城常见的安全漏洞】
  • 【Linux入门篇】Ubuntu和CentOS包管理不一样?apt与yum对比实操,看完再也不混淆
  • 二次比二次型求最值
  • 【选择开源商城系统的风险】
  • 知识库投喂:如何构建与优化AI的核心大脑
  • blazor中 @bind 和 @bind-value 有什么区别
  • python并行编程:使用 joblib / threadpoolctl 实现后端线程数可控的并行化科学计算编程 —— 实现不同线程池下的numpy矩阵计算
  • 量子计算与人工智能:未来科技的双重引擎,如何推动便捷的技术革新
  • P3131 [USACO16JAN] Subsequences Summing to Sevens S
  • Day30鼠标经过事件的区别
  • 什么是GPON和融合网关?
  • 扩散模型如何重塑时间序列分析?一文读懂最新综述
  • LDO 500mA 带载温升测试
  • AI编程工具全景图:从代码补全到智能体协作
  • 《电源测试不求人!纹波 / 效率 / 过流保护等 11 项测试规范(附记录表格)》
  • ue 角色驱动衣服 绑定衣服
  • 电源选型封神帖:宽压 / 高压差 / 低噪声场景的 LDO 与 DCDC 抉择
  • 通达信端口问题
  • 第九章-数字三角形
  • AtCoder Beginner Contest 444 ABCDE 题目解析
  • Electron 应用中的系统检测方案对比 - 教程
  • 《Ionic Range:深度解析与使用指南》
  • Python3 SMTP发送邮件教程
  • 数字图像处理篇---图像锐化
  • 数字图像处理篇---图像模糊
  • 基于SpringBoot的网购平台管理系统毕业设计源码
  • jQuery 隐藏/显示
  • 深度解析 Elasticsearch:从倒排索引到 DSL 查询的实战突围