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" 可截取两个模式之间的内容。