sed 是非交互式文本流编辑器,可执行搜索、替换、删除、插入等操作。
sed 逐行处理输入流,根据脚本命令对文本进行转换后输出。它以行处理为主,结合正则表达式可以实现强大的文本转换功能。sed 默认不修改原文件(除非使用 -i 参数)。
-i)示例 1:替换文本(输出到标准输出)
sed 's/old/new/' file.txt
示例 2:全局替换
sed 's/error/warning/g' build.log
示例 3:直接修改文件(备份原文件)
sed -i.bak 's/localhost:8080/localhost:9090/g' config.yaml
示例 4:删除空白行
sed '/^$/d' file.txt
示例 5:删除第 5 行
sed '5d' file.txt
示例 6:打印第 10 到 20 行
sed -n '10,20p' large_file.txt
示例 7:在匹配行后插入内容
sed '/^\[server\]/a new_setting=true' config.ini
示例 8:在每行开头添加缩进
sed 's/^/ /' code.txt
示例 9:多个替换命令
sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt
示例 10:提取匹配内容
sed -n 's/.*version = \([0-9.]*\).*/\1/p' build.gradle
| 命令 | 说明 |
|---|---|
s/pattern/replacement/ |
替换第一个匹配 |
s/pattern/replacement/g |
替换所有匹配 |
d |
删除行 |
p |
打印行 |
a text |
在匹配行后追加文本 |
i text |
在匹配行前插入文本 |
c text |
替换整行 |
= |
打印行号 |
y/source/dest/ |
逐字符转换 |
| 参数 | 长参数 | 说明 |
|---|---|---|
-n |
--quiet --silent |
抑制自动打印,只输出显式要求的内容 |
-e SCRIPT |
--expression=SCRIPT |
添加脚本命令,可多次使用 |
-f FILE |
--file=FILE |
从文件读取脚本命令 |
-i[SUFFIX] |
--in-place[=SUFFIX] |
直接修改文件,可选创建备份 |
-r |
--regexp-extended |
使用扩展正则表达式 |
-E |
使用扩展正则表达式(GNU 版本) | |
-s |
--separate |
将多个文件视为独立流 |