sed 's/old/new/' file每行只替换第一个 old。
约 773 字大约 3 分钟
2026-05-14
sed 是流式文本编辑器,常用于替换文本、删除行、打印指定范围和在脚本中批量处理配置。它适合处理“按行修改文本”的任务。
`sed` 是流式文本编辑器,常用于替换文本、删除行、打印指定范围和在脚本中批量处理配置。它适合处理“按行修改文本”的任务。
sed 's/old/new/' file每行只替换第一个 old。
sed 's/old/new/g' file每行替换所有 old。
sed -n '10,20p' file只显示第 10 到 20 行。
sed -i.bak 's/old/new/g' file修改文件并保留 .bak 备份。
sed 's/old/new/' file.txt # 每行替换第一个 old
sed 's/old/new/g' file.txt # 每行替换所有 old
sed 's#old/path#new/path#g' file.txt当内容里有 / 时,可以换成 # 等其他分隔符,减少转义。
sed -n '5p' file.txt # 第 5 行
sed -n '10,20p' file.txt # 第 10 到 20 行
sed -n '/ERROR/p' log.txt # 包含 ERROR 的行默认情况下 sed 会打印所有行。使用 -n 后,只有显式 p 的内容才会输出。
sed '5d' file.txt # 删除第 5 行后输出
sed '10,20d' file.txt # 删除第 10 到 20 行
sed '/DEBUG/d' log.txt # 删除包含 DEBUG 的行sed -i.bak 's/old/new/g' file.txt # 修改并生成 file.txt.bak
sed -i 's/old/new/g' file.txt # Linux 常见写法macOS 的 BSD sed 和 Linux GNU sed 在 -i 上有差异。为了兼容,保留备份后缀通常更稳妥:sed -i.bak ...。
原地修改前先预览
先不加 -i 看输出是否符合预期,再执行原地修改。批量替换前建议先备份或使用版本控制。
sed 会一行一行读取文本,把每一行放进“模式空间”,按你的规则处理,再输出结果。默认情况下它不会改原文件,除非你使用 -i。
这也是为什么建议先不加 -i:你看到的输出就是即将写回文件的内容。确认无误后,再执行原地修改。
| 问题 | 处理方式 |
|---|---|
路径里有 / | 换分隔符:s#/old#/new#g |
| 只想替换第 2 次出现 | s/old/new/2 |
| 想忽略大小写 | GNU sed 可用 s/old/new/I |
| macOS 与 Linux 表现不同 | 优先写可移植命令,或注明 GNU/BSD sed |
sed 适合规则明确的批量修改。如果修改逻辑需要跨多行、复杂判断或结构化解析,使用 Python 脚本往往更稳。
版权归属:Shuo Liu