sed 命令可精准修改指定行内容,支持单行、多行、正则匹配及就地编辑并备份。

直接用行号加 s 命令就能精准修改指定行的内容,不需要打开编辑器,也不影响其他行。
指定单行替换
语法是 sed 'N s/旧文本/新文本/' 文件名,其中 N 是目标行号。
- 只改第 3 行第一次出现的 “apple” 为 “orange”:
sed '3s/apple/orange/' file.txt - 改第 3 行所有 “apple”(加
g):sed '3s/apple/orange/g' file.txt - 如果只是预览效果,不改原文件;确认无误后再加
-i
指定多行或范围替换
可以用行号区间,比如把第 2 到第 5 行里的 “error” 全部替换成 “warning”:
sed '2,5s/error/warning/g' file.log- 也可以混合行号和正则,例如:从第 10 行开始,到首次匹配
END的行为止:sed '10,/END/s/debug/info/g' config.conf
就地修改并保留备份
加 -i 才会真正写入文件。强烈建议带上备份后缀,防止误操作:
-
sed -i.bak '1s/^/# Modified on $(date +%F)/' script.sh
——在第 1 行开头插入注释,并自动生成备份script.sh.bak -
sed -i '4c\This is the new fourth line' file.txt
——用c命令整行替换第 4 行(c后面跟反斜杠和新内容)
结合正则更灵活定位
行号不够用时,可用正则匹配行再操作。比如把以 host: 开头的行全部替换成新地址:
sed '/^host:/s/old.example.com/new.example.com/g' config.yml- 想只改第 1 个匹配行?去掉
g即可;想跳过前两匹配、从第 3 个开始改?需配合更复杂逻辑,一般用0,/pattern/{...}或分步处理











