【Linux “sed“ 命令详解】
sed)是 Linux 中强大的文本处理工具之一,用于以流的方式对文本进行处理。它可以执行替换、删除、插入、新增等操作,常用于批量文本编辑、自动化脚本、日志处理等场景。批量修改文本文件内容日志清洗与格式化输出自动化脚本中的文本替换任务快速生成配置文件或结构化文本处理。
·
1. 命令简介
sed(stream editor)是 Linux 中强大的文本处理工具之一,用于以流的方式对文本进行处理。它可以执行替换、删除、插入、新增等操作,常用于批量文本编辑、自动化脚本、日志处理等场景。
sed 的优势:
- 不需要打开编辑器即可快速修改文件内容;
- 可与 shell 脚本或管道命令结合,实现复杂文本处理逻辑;
- 支持正则表达式,功能灵活强大。
2. 命令的基本语法和用法
基本语法:
sed [选项] 'script' [文件...]
参数说明:
script:对文本执行的命令脚本,如s/旧/新/表示替换;文件:要处理的目标文件;[选项]:控制输出行为的参数。
常见用法场景:
示例1:替换文本
将文本 apple 替换为 orange:
sed 's/apple/orange/' fruits.txt
示例2:删除空行
sed '/^$/d' data.txt
示例3:从命令输出中处理内容
ps aux | sed -n '1,5p'
显示前 5 行进程信息。
3. 命令的常用选项及参数
| 选项 | 说明 |
|---|---|
-n |
静默模式,不自动打印处理结果 |
-e |
多条 sed 命令时使用 |
-i |
直接修改文件内容(原地修改) |
-r |
启用扩展正则表达式(GNU sed 支持) |
常用命令动作:
s/pattern/replace/:替换d:删除p:打印a:追加i:插入c:替换整行
4. 命令的执行示例
示例1:替换行中的第一个匹配
sed 's/dog/cat/' animals.txt
将每行中第一个 dog 替换为 cat。
示例2:全局替换每行中的所有匹配
sed 's/dog/cat/g' animals.txt
示例3:显示第 2 到 4 行
sed -n '2,4p' file.txt
输出:
Line 2 content
Line 3 content
Line 4 content
说明:-n 关闭默认输出,只打印指定行。
示例4:删除包含 “DEBUG” 的行
sed '/DEBUG/d' logfile.log
解释:所有包含 DEBUG 的日志行都会被删除。
示例5:文件中就地替换
sed -i 's/http:/https:/g' index.html
将所有 http: 替换为 https:,并直接修改文件。
示例6:在每行末尾添加注释
sed 's/$/ # processed/' script.sh
5. 命令的进阶用法
5.1 多命令执行
使用 -e 运行多个操作:
sed -e 's/foo/bar/g' -e '/^#/d' config.conf
说明:先替换所有 foo 为 bar,再删除注释行。
5.2 替换特定行内容
只替换第 3 行:
sed '3s/old/new/' file.txt
5.3 匹配并插入内容
在匹配行之后插入文本:
sed '/pattern/a inserted line' file.txt
在之前插入:
sed '/pattern/i inserted line' file.txt
5.4 使用扩展正则替换(支持 +、? 等)
sed -r 's/[0-9]+/NUM/' numbers.txt
说明:替换所有数字为 NUM,+ 仅在 -r 模式中生效。
6. 命令的常见问题与解答
Q1:sed 修改文件失败,内容没有变?
原因:未使用 -i 选项
解决:
sed -i 's/old/new/g' file.txt
Q2:如何使用变量替换?
解决:使用双引号将命令包裹:
word="apple"
sed "s/$word/orange/g" file.txt
Q3:如何只替换某一列内容?
解决:结合 awk 处理结构化数据更合适;sed 适合按行和模式处理。
Q4:如何在 macOS 使用 -i?
解决:macOS 要加空字符串:
sed -i '' 's/foo/bar/g' file.txt
7. 总结与建议
应用场景总结:
- 批量修改文本文件内容
- 日志清洗与格式化输出
- 自动化脚本中的文本替换任务
- 快速生成配置文件或结构化文本处理
最佳实践建议:
- 先测试再修改:避免直接使用
-i修改原始文件 - 配合正则表达式使用,实现更灵活的匹配和替换
- 结合管道命令使用(如
grep、awk、sort)可极大增强处理能力 - 使用
-n和p控制输出,提高效率并防止信息冗余
sed 是 Linux 文本处理世界里的“瑞士军刀”,掌握它,你可以优雅地应对各种自动化文本处理任务!
更多推荐


所有评论(0)