Linux sed 命令完全指南
强大的流编辑器 · 文本处理神器
sed [选项] '脚本命令' [文件]
一、sed 是什么?
sed(Stream Editor)是 Linux/Unix 系统中强大的流编辑器,主要用于对文本进行替换、删除、添加等操作。它逐行处理文件或标准输入,支持正则表达式,是文本处理的利器。
sed 被称为"瑞士军刀",可以用极短的命令完成复杂的文本处理任务,大大提高工作效率。
二、基础语法
sed [选项] '命令' [文件]sed [选项] -f 脚本文件 [文件]常用选项:-n 静默模式,不打印模式空间内容-e 添加脚本命令-f 从文件读取脚本-i 直接修改文件-r 使用扩展正则表达式-g 全局替换
三、常用命令
s/pattern/replacement/ 替换匹配的内容p 打印行d 删除行i ext 在行前插入文本a ext 在行后追加文本c ext 替换整行内容= 打印行号w file 写入文件
四、实战示例
4.1 文本替换
sed 's/old/new/' file.txtsed 's/old/new/g' file.txt 全局替换sed 's/old/new/2' file.txt 替换第2个匹配sed '1,10s/old/new/' file.txt 替换1-10行sed '/pattern/s/old/new/' file.txt 只在匹配行替换
4.2 删除操作
sed '1d' file.txt 删除第1行sed '1,5d' file.txt 删除1-5行sed '$d' file.txt 删除最后一行sed '/pattern/d' file.txt 删除匹配的行sed '/^$/d' file.txt 删除空行sed '5,$d' file.txt 删除第5行到最后
4.3 打印操作
sed -n '1p' file.txt 打印第1行sed -n '1,5p' file.txt 打印1-5行sed -n '/pattern/p' file.txt 打印匹配的行sed -n '$p' file.txt 打印最后一行sed '=' file.txt 打印行号
4.4 插入和追加
sed '1i\' 在第1行前插入sed '1a\' 在第1行后追加sed '/pattern/a\' 在匹配行后追加sed 's/^/head: /' file.txt 行首添加前缀sed 's/$/ :end/' file.txt 行尾添加后缀
4.5 多命令组合
sed -e 's/old/new/' -e '1d' file.txtsed '1,5s/old/new/;6,10d' file.txtsed 's/old/new/g; /pattern/d' file.txtsed -f script.sed file.txt
五、sed 与正则表达式
# 匹配数字sed 's/[0-9]//g' file.txt# 匹配邮箱sed 's/[a-zA-Z0-9_]*@[a-z.]*//g' file.txt# 匹配IPsed 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/IP/g' file.txt# 匹配空行sed '/^$/d' file.txt# 匹配以某字符开头的行sed '/^#/d' file.txt
六、实用场景
• 批量替换:在多个文件中查找替换文本 • 日志处理:提取、过滤日志内容 • 配置文件修改:自动修改配置文件 • 数据清洗:去除、格式化数据 • 文本格式化:添加、删除特定内容
七、sed 高级技巧
# 直接修改原文件sed -i 's/old/new/g' file.txt# 备份原文件再修改sed -i.bak 's/old/new/g' file.txt# 使用变量(双引号)sed -i "s/$VAR/new/g" file.txt# 引用shell变量sed "s/$(hostname)/localhost/g" file.txt# 处理多个文件sed -i 's/old/new/g' *.txt
八、常见问题
Q: sed 替换不生效? A: 检查是否需要转义,特殊字符需要反斜杠。
Q: 如何只替换第一个匹配? A: 使用 `s/old/new/` 不带 g 选项。
Q: sed 和 awk 有什么区别? A: sed 适合简单替换/删除,awk 适合复杂计算和处理。
💡 经验总结
1. 记住基本语法:sed '命令' 文件 2. 常用 s 替换命令,加 g 全局替换 3. -i 直接修改文件要谨慎 4. 多用 -n 和 p 组合精确定位