当前位置:首页>Linux>Linux三剑客之sed(上):核心语法与高频操作场景

Linux三剑客之sed(上):核心语法与高频操作场景

  • 2026-09-02 19:48:27
Linux三剑客之sed(上):核心语法与高频操作场景
linux三剑客中awk、grep都讲完了,剩余最后一个sed。sed(Stream Editor 流编辑器) 专注于编辑,它无需打开文件,仅凭一行命令就能批量完成替换、删除、插入等操作,是运维、开发处理日志、配置文件的必备神器!
它的优势如下:
🚀 非交互式:批量处理无需手动干预,几千行文件秒级搞定;
🧩 正则友好:完美支持正则表达式,复杂匹配不在话下;
📤 灵活输出:结果可直接终端显示,也能一键写入文件;
🔧 原地编辑:直接修改原文件;

📚 语法与核心选项

基本语法框架

sed [选项] '脚本命令' 文件名

高频选项(记牢这 4 个就够了)

选项

作用

-n

抑制默认输出,只显示处理结果

-e

执行多条命令(可重复使用)

-i

原地修改文件(直接改原文件)

-r/-E

启用扩展正则(减少转义麻烦)

💡 安全提示:使用 -i 时建议加备份后缀,比如 sed -i.bak 's/old/new/' file.txt,会自动生成 file.txt.bak 备份文件,修改错了也能恢复!

🔨 核心命令:5 个场景覆盖 80% 需求

1. 文本替换(最常用!s 命令)

语法:s/匹配模式/替换内容/标志

g:全局替换

i:忽略大小写 

数字:仅替换第 N 次匹配

1. 替换每行第一个"shanghai"为"SHANGHAI"  

(下面为了演示方便没有加-i参数,为仅演示效果,如果直接修改源文件请加-i,重要文件注意备份或者使用-i.bak)

sed 's/shanghai/SHANGHAI/' 123.txt

2. 全局替换所有"wuhan"为"chongqing" 

sed 's/wuhan/chongqing/g' 123.txt

3. 忽略大小写替换URL(适配http/HTTP)

sed 's/http/https/gi' links.txt

4. 替换第2次出现的"hello"为"HELLO"

sed 's/test/prod/2' ceshi.txt

2. 行过滤与删除(d 命令)

(下面演示没有加-i参数,仅演示效果,如果直接修改源文件请加-i,重要文件主要备份或者使用-i.bak)

1. 删除第3行

sed '3d' data.txt  #前面加参数-i是直接在源文件修改 

2. 删除空行(清理日志常用)

sed '/^$/d' data.txt

3. 删除所有注释行(以#开头)

sed '/^#/d' ceshi.txt

4. 删除包含"hello"的行

sed '/hello/d' ceshi.txt

3. 内容插入与追加(i/a 命令)

(下面为了演示方便没有加-i参数,为仅演示效果,如果直接修改源文件请加-i,重要文件注意备份或者使用-i.bak)

1. 在第3行前插入注释

sed '3i\# 配置数据库连接'  app.conf

2. 在匹配"[dbserver]"的行后追加端口配置

sed '/\[server\]/a\port = 8080' app.ini

3. 在最后一行追加版权信息

sed '$a\# 版权所有 © 2026' ceshi.txt

4. 精准打印(配合 - n 选项)

1. 只打印包含"ERROR"的行(日志排查神器)

sed -n '/error/p' mysqld.log

2. 打印第10-20行(截取文件片段)

sed -n '10,20p' mysqld.txt

3. 打印非注释行

sed -n '/^#/!p' vsftpd.confbak

5. 地址范围操作

sed 支持按行号、模式指定操作范围,灵活性拉满:

1. 第1-2行全局替换

sed '1,2s/a/D/g' 11.txt  #将1-2行的a换成大写D

2. 从"abc"到"bcd"之间的行删除

sed '/abc/,/bcd/d' 11.txt

3. 第2行及后面2行替换

sed '2,+2s/ABc/ABC/' 11.txt  #将第二行及后面2行中的ABc替换为ABC

4. 奇数行替换(1~2表示从第1行开始,步长2)

sed '1~2s/a/D/' l1.txt  #将奇数行中的a替换为大写D 
#运维#linux运维#linux三剑客#sed

最新文章

随机文章