sed — 流编辑器

sed 是非交互式文本流编辑器,可执行搜索、替换、删除、插入等操作。

命令说明

sed 逐行处理输入流,根据脚本命令对文本进行转换后输出。它以行处理为主,结合正则表达式可以实现强大的文本转换功能。sed 默认不修改原文件(除非使用 -i 参数)。

应用场景

  • 批量文本替换
  • 删除特定行
  • 提取文件中的特定范围
  • 插入和追加文本
  • 修改配置文件(配合 -i
  • 清理文本格式

常用示例

示例 1:替换文本(输出到标准输出)

bash
复制代码
sed 's/old/new/' file.txt

示例 2:全局替换

bash
复制代码
sed 's/error/warning/g' build.log

示例 3:直接修改文件(备份原文件)

bash
复制代码
sed -i.bak 's/localhost:8080/localhost:9090/g' config.yaml

示例 4:删除空白行

bash
复制代码
sed '/^$/d' file.txt

示例 5:删除第 5 行

bash
复制代码
sed '5d' file.txt

示例 6:打印第 10 到 20 行

bash
复制代码
sed -n '10,20p' large_file.txt

示例 7:在匹配行后插入内容

bash
复制代码
sed '/^\[server\]/a new_setting=true' config.ini

示例 8:在每行开头添加缩进

bash
复制代码
sed 's/^/    /' code.txt

示例 9:多个替换命令

bash
复制代码
sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt

示例 10:提取匹配内容

bash
复制代码
sed -n 's/.*version = \([0-9.]*\).*/\1/p' build.gradle

常用 sed 命令

命令 说明
s/pattern/replacement/ 替换第一个匹配
s/pattern/replacement/g 替换所有匹配
d 删除行
p 打印行
a text 在匹配行后追加文本
i text 在匹配行前插入文本
c text 替换整行
= 打印行号
y/source/dest/ 逐字符转换

help 参数详解

参数 长参数 说明
-n --quiet --silent 抑制自动打印,只输出显式要求的内容
-e SCRIPT --expression=SCRIPT 添加脚本命令,可多次使用
-f FILE --file=FILE 从文件读取脚本命令
-i[SUFFIX] --in-place[=SUFFIX] 直接修改文件,可选创建备份
-r --regexp-extended 使用扩展正则表达式
-E 使用扩展正则表达式(GNU 版本)
-s --separate 将多个文件视为独立流