乐于分享
好东西不私藏

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

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

技术弄巷

读完仅需

5
分钟

记得星标公众号

前言

在 Linux 运维日常工作里,批量修改配置、过滤文本、删除空行、替换字符、统计行数等操作极其频繁。sed 作为一款非交互式流编辑器,无需打开文件即可直接在命令行完成文本处理,效率远超手动编辑,是运维必须熟练掌握的“文本三剑客”核心工具之一。

本文从工作原理、命令格式、行定位、核心操作、常用选项到实战练习,一站式完整梳理 sed 所有高频用法,可直接用于生产环境。

一、sed 工具介绍

是什么

sed 全称为 stream editor,即流编辑器

核心作用

批量、自动化编辑文本文件

工作原理

  1. 把文件逐行读入内存(模式空间)
  2. 在内存中按规则修改文本
  3. 默认把处理结果输出到屏幕
  4. 默认不修改原文件,安全可靠

二、sed 命令格式

sed [选项] '定位+操作' 文件名
  • 定位(line)
    :指定要处理哪些行
  • 操作(CMD)
    :对行执行删除、替换、追加等动作
  • 不写定位 = 处理所有行

三、行定位方式(指定处理范围)

  1. 直接指定行号:10(第10行)
  2. 区间:5,10(第5到10行)
  3. 偏移:5,+3(第5行及后面3行)
  4. 正则匹配:/^#/(以 # 开头的行)
  5. 正则区间:/正则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 常用选项

  1. -n
    :只显示匹配行,关闭默认输出
  2. -i
    直接修改原文件(生产谨慎使用)
  3. -e
    :一次执行多个操作
  4. -f
    :从文件读取操作规则
  5. -r
    :支持扩展正则,不用加 \ 转义
  6. --follow-symlinks
    :支持修改软链接文件

示例:

sed -i '/^$/d' /etc/fstab           # 删除空行并保存
sed -e '/^#/d' -e '/UUID/d' /etc/fstab  # 多条件操作
sed -r 's|l(..e)|L\1|' /tmp/file01   # 扩展正则

六、运维实战练习

  1. 删除 df -hT标题行及 tmpfs 行
  2. 批量修改 sshd 配置:端口 55555、关闭 DNS、禁止 root 登录
  3. 把 SELINUX=enforcing 改为 SELINUX=disabled
  4. 修改 httpd 默认端口为 8080
  5. 向 /etc/hosts 追加主机名解析
  6. 提取 /var/log/messages 指定时间段日志
  7. 给文件第2、4行添加注释
  8. 只显示 /etc/passwd 第5行
  9. 删除历史命令前的空白字符

核心要点总结

  1. sed 是流编辑器,逐行处理、默认不改原文件,安全高效。
  2. 定位方式:行号、区间、正则,灵活指定处理范围。
  3. 高频操作:d删除、p显示、a/i增行、c改行、s替换。
  4. -n
    只打印结果,-i真正写文件,-r支持扩展正则。
  5. s///
    是最常用替换语法,支持分组与反向引用。
  6. 运维场景:批量改配置、删空行、过滤日志、统计行数、文本替换。

结尾互动

sed 是 Linux 文本处理效率之王,掌握它能让你在运维工作中少敲90%的重复命令

如果这篇干货对你的工作有帮助,欢迎点赞、在看、转发,让更多运维朋友快速提升效率!

关注我,持续更新 Linux 运维、Shell 脚本、三剑客实战、自动化运维等硬核干货,一起做高效运维人!