Linux Shell 编程基础:sed 命令从入门到精通(超详细版)

在 Linux Shell 文本处理中,sed(Stream Editor,流编辑器) 是不可或缺的核心工具,它以行为单位处理文本,无需加载整个文件,高效完成替换、删除、插入、修改、筛选等操作,是运维、日志处理、配置文件修改的必备技能。

本文从零开始,用最通俗的语言、最实用的案例,带你彻底掌握 sed 基础用法,可直接用于工作与面试。


一、sed 核心认知

1.1 什么是 sed

  • 非交互式文本编辑器,逐行读取、逐行处理、逐行输出
  • 默认不修改原文件,只输出到标准输出
  • 支持正则表达式,处理文本灵活强大
  • 常用于:批量替换、删除空行、注释配置项、提取文本、格式化内容

1.2 基本语法

sed [选项] '命令/地址/操作' 文件名

常用选项:

  • -n静默输出,只打印匹配 / 指定的行
  • -i直接修改原文件(慎用,建议先测试)
  • -i.bak:修改前备份原文件(安全用法)
  • -e:执行多个 sed 命令
  • -r:支持扩展正则表达式

二、sed 最常用核心操作

2.1 替换操作:s(最常用)

替换是 sed 使用率最高的功能,语法:

sed 's/旧内容/新内容/标志' 文件名
常用标志
  • g:全局替换(默认只替换每行第 1 个匹配)
  • i:忽略大小写
  • 数字:只替换第 N 个匹配
  • p:打印替换后的行(配合 -n
实战案例

  1. 基础替换(每行第一个匹配)

sed 's/root/admin/' test.txt

  2. 全局替换(所有匹配都替换)

sed 's/root/admin/g' test.txt

  3. 忽略大小写替换

sed 's/root/admin/gi' test.txt

  4. 只替换第 2 个匹配

sed 's/root/admin/2' test.txt

  5. 路径替换(换分隔符避免转义)当内容含 / 时,用 | # @ 做分隔符更安全:

sed 's|/bin/bash|/bin/sh|g' /etc/passwd

2.2 删除操作:d

删除指定行 / 匹配行,语法:

sed '地址d' 文件名
实战案例

  1. 删除第 3 行

sed '3d' test.txt

  2. 删除第 3~5 行

sed '3,5d' test.txt

  3. 删除最后一行

sed '$d' test.txt

  4. 删除包含指定字符串的行

sed '/test/d' test.txt

  5. 删除空行

sed '/^$/d' test.txt

  6. 删除从匹配行到文件末尾

sed '/end/,$d' test.txt

2.3 插入 / 追加 / 整行替换:i /a/c

  • i:在指定行前面插入
  • a:在指定行后面追加
  • c替换整行内容
实战案例

  1. 第 2 行前插入文本

sed '2i\插入的内容' test.txt

  2. 第 2 行后追加文本

sed '2a\追加的内容' test.txt

  3. 替换第 2 行整行

sed '2c\这行被完全替换' test.txt

  4. 匹配行前插入分隔线

sed '/error/i\=====错误行=====' test.txt

2.4 打印操作:p(配合 -n)

-n 禁止默认输出,p 只打印指定行,实现文本筛选

实战案例

  1. 只打印第 3 行

sed -n '3p' test.txt

  2. 打印第 3~5 行

sed -n '3,5p' test.txt

  3. 打印包含指定内容的行

sed -n '/root/p' /etc/passwd

  4. 打印带数字的行

sed -n '/[0-9]/p' test.txt

三、sed 地址定位(精准控制操作范围)

sed 支持两种地址定位:行号范围模式匹配范围

3.1 行号范围

  • n:第 n 行
  • n,m:第 n 到 m 行
  • n,$:第 n 行到文件末尾
  • $:最后一行

3.2 模式范围

  • /pattern1/,/pattern2/:从匹配 pattern1 的行,到匹配 pattern2 的行
案例:范围内替换
# 从 first 到 last 之间,把 line 替换为 LINE
sed '/first/,/last/s/line/LINE/g' test.txt

四、sed 高级实战(工作必用)

4.1 配置文件批量处理

  1. 注释配置项

sed 's/^\(app.debug=\)/#\1/' config.ini

  2. 取消注释

sed 's/^#\+\(.*app.maintenance.*\)/\1/' config.ini

  3. 修改配置值

sed '/^app.debug=/s/=.*/=false/' config.ini

4.2 文本清洗

  1. 删除 HTML 标签

sed 's/<[^>]*>//g' index.html

  2. 合并所有行为一行

sed ':a;N;$!ba;s/\n/ /g' test.txt

  3. 给文本加行号

sed '=' test.txt | sed 'N; s/\n/ /'

4.3 安全修改文件

# 直接修改
sed -i 's/old/new/g' test.txt

# 修改前自动备份为 test.txt.bak
sed -i.bak 's/old/new/g' test.txt

五、sed 速记表(建议收藏)

命令作用
s/old/new/g全局替换
3d删除第 3 行
$d删除最后一行
/^$/d删除空行
2i\内容第 2 行前插入
2a\内容第 2 行后追加
-n '3p'只打印第 3 行
-i直接修改原文件
-i.bak备份 + 修改

六、总结

sed 是 Linux 文本处理三剑客(grep/sed/awk)中最擅长批量修改的工具:

  • 简单文本替换 / 删除 → 用 sed
  • 配置文件批量修改 → 用 sed
  • 日志清洗、格式转换 → 用 sed

掌握本文内容,足以应对 90% 的日常 Shell 文本处理场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值