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

文本管理grep sed awk

文本三剑客

工具 核心定位 作用
grep过滤与查找 在海量文本中快速定位包含特定模式

sed流编辑器 以“行”为单位进行文本的增删改查,无需打开文件即可实现自动化批量修改

awk文本处理语言 强大的结构化文本处理工具,支持分列处理、变量、条件判断和循环。

grep

  1. -v:反向选择(Invert Match)
    核心定义: 排除法。只显示不包含指定模式的行。

为什么用: 运维在看配置文件(如 nginx.conf 或 sshd_config)时,文件里往往有大量的注释行(以 # 开头)和空白行,干扰视线。用 -v 可以瞬间过滤掉这些“噪音”。

grep-v"^#"/etc/ssh/sshd_config
  1. -n:显示行号(Line Number)
    核心定义: 标记位置。在输出的每一行前面,加上它在原始文件中的行号。

为什么用: 当你在几千行的日志或配置文件里找到了报错,如果不加 -n,你还得肉眼去翻第几行。知道了行号,配合 vim +行号 文件名 就能一键直达现场修改。

grep-n"error"/var/log/nginx/error.log

(输出示例:152:2026/06/03 [error] … 告诉你第 152 行有错)

  1. -r:递归搜索(Recursive)
    核心定义: 地毯式搜索。不仅搜索当前目录,还会深入到子目录、孙子目录的所有文件中去搜。

为什么用: 线上有几十个微服务,配置和日志散落在 /etc/ 或 /var/log/ 的各个子文件夹里。你不知道具体在哪,用 -r 可以直接把整个目录翻个底朝天

grep-r"192.168.1.100"/etc/nginx/

(在 nginx 目录及其所有子目录下,查找哪个配置文件引用了这个 IP)

  1. -E:扩展正则表达式(Extended Regexp)
    核心定义: 解锁高级语法。让 grep 能够识别 ?、+、{}、()、| 等高级正则符号,而不需要加繁琐的反斜杠 \。

为什么用: 面对复杂的文本模式(比如匹配 IP 地址、手机号、或者多条件“或”),普通 grep 会把这些符号当成纯文本,必须加 -E 才能激活它们的特殊超能力。

grep-E"CRITICAL|EMERGENCY"/var/log/messages

(同时匹配两个严重级别)

最后,在实际干活时,运维工程师往往会把它们组合起来使用,产生 1+1>2 的效果。
例如:

grep-r-n-v"^#"/var/www/html/|grep-E"http://"
  1. -r 先把 /var/www/html/ 整个项目目录及子目录全部掀开
  2. -v “^#” 瞬间把所有写了注释、不生效的行排除掉
  3. -n 紧紧贴上行号标签

``
注意事项:
在生产环境使用 grep -r(递归搜索)时,千万不要在根目录 / 或者挂载了海量网络存储(如 NFS)的目录上直接运行,如果你在根目录运行 grep -r “keyword” /,系统会去扫描 /proc(内存虚拟目录)、/dev(设备文件)甚至是几个 T 的网盘,这会导致服务器 I/O 瞬间飙满,CPU 100%,引发线上生产事故! > 最佳实践: 永远指定具体、狭小的目录范围,如 /etc/nginx/ 或 /var/log/myapp/。

sed

sed 的全称是 Stream Editor(流编辑器)。它最强大的地方在于:不需要用 vim 手动打开文件,只需一行命令,就能在零点几秒内把文件里成百上千处的错误内容全部改掉。

sed 替换最基本的语法骨架是:sed ‘s/旧内容/新内容/分境符’ 文件名 (s 代表 substitute 替换)。

实战案例

1.预览替换(不修改原文件)

sed's/listen 80;/listen 8080;/g'nginx.conf

默认情况下,sed 只是把文件读入内存(模式空间)进行处理,然后把结果打印到屏幕上,完全不会改变硬盘上的原文件! 末尾的 g(global)代表全局替换,即如果一行里出现多次,全部替换;如果不加 g,它只会替换每一行遇到的第一个。

2.直接修改文件(-i 参数)

sed-i's/listen 80;/listen 8080;/g'nginx.conf

加上了 -i(inplace)参数。这时候 sed 不再把结果往屏幕上倒,而是直接把修改后的内容覆盖写入到硬盘的文件中

3.替换带有斜杠 / 的特殊内容

sed-i's#/usr/local/mysql#/data/mysql#g'app.conf

sed 的分隔符极其灵活!s 后面紧跟的第一个字符就会被当成新的分隔符。运维常用的安全分隔符有 #、@、_ 等。改用 # 之后,路径里的 / 就再也不需要加反斜杠 \ 去频繁地转义了。

4.只替换特定行

sed-i'5s/debug=true/debug=false/'app.conf

先匹配,再替换(只在包含 “Database” 的那一行里,把 admin 改为 root)

sed-i'/Database/s/admin/root/g'app.conf

执行建议
由于 sed -i 作用强制,一不小心可能把整个系统配置改废。

需要在特定情况添加: -i.bak
只要在 -i 后面紧跟一个扩展名(中间不要有空格),例如:
sed -i.bak ‘s/A/B/g’ config.toml
sed 会在修改 config.toml 的前一毫秒,自动在当前目录下生成一个一模一样的备份文件 config.toml.bak。一旦线上报错,执行 mv config.toml.bak config.toml 瞬间就能回滚复原。这在自动化部署脚本中是雷打不动的标准规范!

awk

    • awk ‘{print $1,$3}’ 文件
      核心定义: 默认切片输出。

为什么用: awk 默认会把每一行文本按照空格或制表符(Tab)切成一列一列。$1 代表第 1 列,$3 代表第 3 列,中间的逗号 , 在输出时会变 成一个空格。

运维实战: 检查系统内存。执行 free -h 时,你想直接提取“Total(总量)”和“Available(可用量)”这两列,就可以用它直接切出来。

    • awk -F’:’ ‘{print $1,$3}’ 文件

    核心定义: 指定分隔符切片。

    为什么用: 很多 Linux 系统配置文件的列不是用空格隔开的。-F(Field Separator)就是用来指定自定义分隔符。
    运维实战: 查看系统所有用户的 UID。Linux 的用户配置文件 /etc/passwd 是用冒号 : 分隔的。这条命令 awk -F’:’ ‘{print $1,$3}’ /etc/passwd 就能完美把用户名(第1列)和用户ID(第3列)拉出来。

    • awk ‘/关键字/{print $1,$3}’ 文件

核心定义: 过滤+切片组合(先匹配,再打印)。

为什么用: 相当于把 grep 的过滤功能融入到了 awk 内部。只有这一行包含了“关键字”,才会去打印它的第 1 和第 3 列。

运维实战: 找特定服务的 PID。在 ps -ef 输出的几百个进程里,你只想看包含 nginx 的进程,并打印它的主进程号,就可以写 ps -ef | awk ‘/nginx/{print $2}’

    • awk ‘NF==2{print $1,$3}’ 文件

核心定义: 利用内置变量做精准条件判断。

为什么用: NF 是 awk 的一个内置变量(Number of Fields),代表当前行一共有多少列。NF==2 意味着“只有当这一行刚好被切成 2 列时”,才执行后面的打印。

运维实战: 清洗脏数据。有时候日志文件不规整,有的行全,有的行缺斤少两。通过 NF 限制,可以完美过滤掉那些格式破损的异常日志行。

  1. 正则表达式

^ (行首锚定): 匹配以什么开头的行。例如 /^nginx/ 匹配所有以 nginx 开头的行。
$ (行尾锚定): 匹配以什么结尾的行。例如 /false$/ 寻找所有以 false 结尾的用户。
^ $ (空行): 行首紧接着行尾,代表什么都没有的空白行。运维常用 grep -v ‘^$’ 来把文件里的所有空行删掉,让配置更紧凑。
[^](取反字符组): 匹配除了括号内字符以外的任意单个字符。例如 [^0-9] 代表找一个非数字的字符。
{m,n}(限定次数): 前面的字符最少出现mmm次,最多出现nnn次。常用来精准匹配 IP 地址(比如数字出现 1 到 3 次:[0-9]{1,3})。

http://www.rkmt.cn/news/1508108.html

相关文章:

  • 原神祈愿数据分析工具:从数据收集到深度洞察的专业解决方案
  • 2026年石英砂厂家哪家口碑好?从四川到全国供应商电话与选型指南(附真实案例) - 优质品牌商家
  • 2026年当下,探寻长沙五一广场值得信赖的影院式足疗实体门店 - 品牌鉴赏官2026
  • 2026年治安岗亭品牌怎么选?从材料工艺到项目案例的多维对比分析 - 优质品牌商家
  • 鸿蒙语音播报功能 的 Flutter 侧封装思路
  • 基于SpringBoot+Vue的火锅店管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 强化学习潜在动态表示技术解析与应用
  • 双STM32分工协作的两轮自平衡车设计包:含硬件图纸、双核固件与安卓蓝牙遥控
  • 中小企业选空号检测,看这一篇就够了:企讯通、运营商直连、垂直服务商三大梯队实测对比
  • openEuler开发环境搭建:从零开始构建应用开发平台
  • 当ZYNQ的MDIO管脚不够用?手把手教你用GPIO模拟管理多个PHY芯片(附完整C代码)
  • 从IMU数据流到稳定画面:深入海思Hi3516DV500陀螺仪防抖的底层数据链路
  • 从RGB颜色提取到大小端转换:图解移位运算在嵌入式开发中的5个经典应用
  • 从脚本到图表:PlantUML时序图语法避坑指南与实战示例解析
  • ChromePass终极指南:解密Chrome密码存储的专业工具
  • 【2027最新】基于SpringBoot+Vue的民族婚纱预定系统管理系统源码+MyBatis+MySQL
  • 一键起飞条件分析
  • Android 9 音量调节踩坑记:为什么你的15级音量调到30级也没用?
  • 2026年新发布:专业大量收乌龟的机构深度推荐与选择指南 - 品牌鉴赏官2026
  • 2026年新发布安徽九华山土菜餐馆优秀单:宴八方土菜馆深度解析 - 品牌鉴赏官2026
  • AI Agent 人机协作:从自主决策到人工审批的混合编排模式
  • 从视频到标签:利用Labelme高效构建视频标注工作流
  • 当InfiniBand网络“大脑”宕机时:深入理解Mellanox SM HA的故障切换机制与业务影响
  • 从手机芯片到显卡:看懂宣传页里的算力(TOPS/FLOPS)到底靠不靠谱
  • 别再只盯着BIOS了!聊聊主板上的‘隐形管家’:Embedded Controller (EC) 到底管啥?
  • Python+Django实战|线上问卷与投票调研系统:自定义题型、问卷发布、链接分享、答卷收集、数据可视化、报表导出
  • mbedtls RSA签名验签踩坑记:PKCS#1 V1.5和V2.1填充模式到底怎么选?
  • 2026年广州除甲醛公司哪家效果好?地域化服务对比与避坑指南 - 观域传媒
  • Nucleus Co-Op完整教程:Windows单机游戏分屏多人本地同乐终极指南
  • 别再只盯着CD和EMD了!点云补全评估指标F-Score与DCD实战解读(附代码示例)