sed
对文本流进行非交互式的查找、替换、删除和插入操作
语法
sed [options] 'command' file
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
-i |
直接修改文件(原地编辑) | |
常用 |
-n |
静默模式,仅输出处理后的行 | |
常用 |
-e |
执行多个编辑命令 | |
常用 |
-E |
使用扩展正则表达式 | |
常用 |
g |
全局替换标志(替换行内所有匹配) | |
常用 |
示例
全局替换 old 为 new
sed 's/old/new/g' file.txt
原地修改配置文件中的地址
sed -i 's/localhost/127.0.0.1/g' config.yml
打印第 10 到 20 行
sed -n '10,20p' file.txt
删除所有注释行(以 # 开头)
sed '/^#/d' config.conf
删除所有空行
sed -i '/^$/d' file.txt
用 | 作分隔符替换路径(避免转义斜杠)
sed 's|/usr/local|/opt|g' paths.txt
技巧
- macOS 的 sed -i 需要备份后缀:sed -i '' 's/a/b/g' file
- 用 & 引用匹配内容:sed 's/[0-9]*/(&)/' 给数字加括号
- 分隔符可以换用 | 或 # 等字符,处理路径时更方便
- 批量替换:find . -name '*.txt' | xargs sed -i 's/foo/bar/g'