Linux 运维文本神器:sed 流编辑器核心用法与实战精讲

技术弄巷
读完仅需
记得星标公众号

前言
在 Linux 运维日常工作里,批量修改配置、过滤文本、删除空行、替换字符、统计行数等操作极其频繁。sed 作为一款非交互式流编辑器,无需打开文件即可直接在命令行完成文本处理,效率远超手动编辑,是运维必须熟练掌握的“文本三剑客”核心工具之一。
本文从工作原理、命令格式、行定位、核心操作、常用选项到实战练习,一站式完整梳理 sed 所有高频用法,可直接用于生产环境。

一、sed 工具介绍
是什么
sed 全称为 stream editor,即流编辑器。
核心作用
批量、自动化编辑文本文件。
工作原理
-
把文件逐行读入内存(模式空间) -
在内存中按规则修改文本 -
默认把处理结果输出到屏幕 - 默认不修改原文件,安全可靠
二、sed 命令格式
sed [选项] '定位+操作' 文件名
- 定位(line)
:指定要处理哪些行 - 操作(CMD)
:对行执行删除、替换、追加等动作 -
不写定位 = 处理所有行
三、行定位方式(指定处理范围)
-
直接指定行号: 10(第10行) -
区间: 5,10(第5到10行) -
偏移: 5,+3(第5行及后面3行) -
正则匹配: /^#/(以 # 开头的行) -
正则区间: /正则1/,/正则2/
四、sed 核心操作命令
1. 删除行:d
sed '1d' /etc/fstab # 删除第1行
sed '1,5d' /etc/fstab # 删除1-5行
sed '/^#/d' /etc/fstab # 删除注释行
sed '/^\//d' /etc/fstab # 删除以/开头的行
netstat -antp | sed '1,2d'# 删除前两行标题
2. 显示行:p
必须配合 -n关闭默认输出,避免重复打印
sed -n '/^#/p' /etc/fstab # 只显示注释行
df -hT | sed -n '/^\/dev/p'# 只显示磁盘设备行
3. 行尾追加:a \内容
sed '$a \10.1.1.1 node01.linux.com' /etc/hosts
sed '$a \export JAVA_HOME=/opt/jdk' /etc/profile
4. 行前插入:i \内容
sed 'i \172.16.10.1 www.linux.com' /etc/hosts
sed '/datadir/i \server_id=10\nlog_bin=master' /etc/my.cnf
5. 整行替换:c \内容
sed '/#Port/c \Port 55555' /etc/ssh/sshd_config
6. 另存为:w 文件名
sed '/^#/w /tmp/test01' /etc/fstab
7. 合并文件:r 文件名
sed '$r /etc/hosts' /etc/redhat-release
8. 显示行号/统计行数:=
sed -n '$=' /etc/fstab # 输出文件总行数
9. 读取下一行:n
sed -n '{n;p}' /tmp/file01 # 显示偶数行
sed -n '{p;n}' /tmp/file01 # 显示奇数行
10. 查找替换:s/旧/新/修饰符
旧内容支持正则,最常用核心功能
sed '/^UUID=/s/UUID/uuid/' /etc/fstab # 替换UUID为uuid
sed '$s/4/8/' /etc/fstab # 最后一行把4换成8
sed 's/[0-9]/!/g' /etc/fstab # 全局替换数字为!
sed '$s|/|?|g' /etc/fstab # 换分隔符避免转义
11. 反向引用
\1 \2 \3
:引用第1/2/3个分组 &
:引用整个匹配内容
sed -r 's|(l..e)|\1r|' /tmp/file01
sed -r 's|l(..e)|L\1|' /tmp/file01
sed 's|l..e|&r|' /tmp/file01
五、sed 常用选项
-n
:只显示匹配行,关闭默认输出 -i
:直接修改原文件(生产谨慎使用) -e
:一次执行多个操作 -f
:从文件读取操作规则 -r
:支持扩展正则,不用加 \ 转义 --follow-symlinks
:支持修改软链接文件
示例:
sed -i '/^$/d' /etc/fstab # 删除空行并保存
sed -e '/^#/d' -e '/UUID/d' /etc/fstab # 多条件操作
sed -r 's|l(..e)|L\1|' /tmp/file01 # 扩展正则
六、运维实战练习
-
删除 df -hT标题行及 tmpfs 行 -
批量修改 sshd 配置:端口 55555、关闭 DNS、禁止 root 登录 -
把 SELINUX=enforcing 改为 SELINUX=disabled -
修改 httpd 默认端口为 8080 -
向 /etc/hosts 追加主机名解析 -
提取 /var/log/messages 指定时间段日志 -
给文件第2、4行添加注释 -
只显示 /etc/passwd 第5行 -
删除历史命令前的空白字符
核心要点总结
-
sed 是流编辑器,逐行处理、默认不改原文件,安全高效。 -
定位方式:行号、区间、正则,灵活指定处理范围。 -
高频操作: d删除、p显示、a/i增行、c改行、s替换。 -n
只打印结果, -i真正写文件,-r支持扩展正则。s///
是最常用替换语法,支持分组与反向引用。 -
运维场景:批量改配置、删空行、过滤日志、统计行数、文本替换。
结尾互动
sed 是 Linux 文本处理效率之王,掌握它能让你在运维工作中少敲90%的重复命令。
如果这篇干货对你的工作有帮助,欢迎点赞、在看、转发,让更多运维朋友快速提升效率!
关注我,持续更新 Linux 运维、Shell 脚本、三剑客实战、自动化运维等硬核干货,一起做高效运维人!


夜雨聆风