当前位置: 首页 > 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.jsqmd.com/news/996340/

相关文章:

  • 原神祈愿数据分析工具:从数据收集到深度洞察的专业解决方案
  • STM32F103用I2C接PCF8575扩展GPIO,最多256路数字IO(含Keil工程+驱动源码)
  • 当ZYNQ的MDIO管脚不够用?手把手教你用GPIO模拟MDC/MDIO驱动多个PHY芯片
  • 别再傻傻分不清!用示波器实测SDP/CDP/DCP,手把手教你读懂USB BC1.2充电握手信号
  • 从抓包看懂TLS握手:用Wireshark解密Chrome与Nginx的加密套件协商过程
  • 2026年石英砂厂家哪家口碑好?从四川到全国供应商电话与选型指南(附真实案例) - 优质品牌商家
  • 2026年靠谱的青岛软装家居/胶州本地家具家居/青岛家居消费者推荐 - 行业平台推荐
  • 2026年可定制的公共广播系统音柱/音柱/浙江工程批量采购音柱/宁波壁挂音柱多家厂家对比分析 - 行业平台推荐
  • Swin-Unet凭什么超越传统U-Net?深入拆解Patch Merging与Expanding层的设计精髓
  • 告别GetProcAddress被Hook的烦恼:手写PE解析函数获取LdrLoadDll地址的实战教程
  • 从筹码分布到获利比率:Python实战模拟通达信winner函数
  • 别再让GPU闲着!实战对比:Triton Server动态批处理(Dynamic Batching)能提升多少推理吞吐?
  • 2026年HEPA高效过滤器哪家最好用解析 - 品牌排行榜
  • 2026年当下,探寻长沙五一广场值得信赖的影院式足疗实体门店 - 品牌鉴赏官2026
  • Display Driver Uninstaller终极指南:彻底清理显卡驱动冲突的免费完整解决方案
  • 从Buck-Boost到反激变压器:一个电路‘变形记’帮你彻底理解磁芯与线圈
  • 鸿蒙语音播报功能 的 Flutter 侧封装思路
  • 如何3步免费解锁Microsoft 365完整功能:Ohook智能激活指南
  • 基于SpringBoot+Vue的火锅店管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 2026年治安岗亭品牌怎么选?从材料工艺到项目案例的多维对比分析 - 优质品牌商家
  • 2026年不间断UPS电源市场格局观察:从工业机房到医疗场景的供应商能力解析 - 优质品牌商家
  • 2026年水族店进货灯具哪些品牌更稳妥:渠道端选型决策与避坑指南 - 华旭传媒
  • 2026年宁夏太阳能路灯市场深度观察:哪家公司更值得信赖?技术、案例与价格全解析! - 优质品牌商家
  • 双STM32分工协作的两轮自平衡车设计包:含硬件图纸、双核固件与安卓蓝牙遥控
  • 2026年比较好的青岛家具家居/青岛家居/胶州品牌家具家居/青岛软装家居装修业主推荐 - 品牌宣传支持者
  • Topit:macOS窗口置顶工具的终极解决方案
  • SpringBoot+Vue 高校专业实习管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • 强化学习潜在动态表示技术解析与应用
  • 中小企业选空号检测,看这一篇就够了:企讯通、运营商直连、垂直服务商三大梯队实测对比
  • 如何轻松地将照片从Android传输到Mac ?