004 sed命令
命令说明
sed(Stream Editor)是流编辑器,逐行读取文本、按脚本编辑后输出,常用于批量替换、插入、删除和格式化文本,是 Shell 脚本中处理文本的核心工具。
语法
sed [选项]... '脚本' [文件]...
常用参数
| 参数 | 说明 |
|---|---|
| -n | 静默模式,只输出被处理后的行(配合 p 使用) |
| -i | 直接修改文件内容(in-place),慎用,可加备份后缀如 -i.bak |
| -e | 一次执行多条 sed 指令 |
| -r | 使用扩展正则(GNU sed 为 -E) |
使用示例
$ sed 's/old/new/' file.txt
每行第一个 old 替换为 new
$ sed 's/old/new/g' file.txt
每行所有 old 替换为 new(g = 全局)
$ sed -i 's/8080/9090/g' nginx.conf
直接修改文件,把端口 8080 改为 9090
$ sed -i.bak 's/http:/https:/g' site.conf
替换前先备份为 site.conf.bak
$ sed '3d' file.txt
删除第 3 行
$ sed '2,5d' file.txt
删除第 2 到 5 行
$ sed '/^#/d' conf
删除所有以 # 开头的注释行
$ sed -n '10,20p' file.txt
只打印第 10 到 20 行(类似 awk 截取)
$ sed 's/ *$//' file.txt
去掉每行行尾空格
$ sed '1i\# header' file.txt
在第 1 行前插入内容
实用技巧
- 替换分隔符不一定是 /:路径替换时可用 sed "s|/old/path|/new/path|g",避免转义。
- & 在替换串中代表整个匹配内容:sed "s/[0-9]\+/[&]/g" 可给所有数字加方括号。
- sed 的 -i 在 GNU(Linux)与 BSD(macOS)下语法不同,跨平台脚本要特别注意。
- 与 grep 配合:sed -n "/pattern/,/end/p" 可截取两个模式之间的内容。