You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sed无需指定行号替换文件中最后一次出现的指定文本

替换文件中最后一次出现的bye的两种可行方案

方法1:tac + sed 组合(逻辑简单易理解)

利用tac命令将文件内容逆序输出,替换第一个匹配到的bye,再逆序回原顺序,即可实现替换原文件最后一次出现的bye:

# 适配所有Unix-like系统的写法
tac file | sed '0,/bye/ s/bye/adieu/' | tac > tmp_file && mv tmp_file file

如果你的系统安装了moreutils工具包,还可以用sponge简化临时文件操作:

tac file | sed '0,/bye/ {s/bye/adieu/;q}' | tac | sponge file

小提示:上述命令中的q是匹配到第一个结果后就退出sed,减少大文件处理时的性能开销

方法2:纯sed实现(无额外依赖)

利用sed的保留空间特性和正则贪婪匹配,无需借助其他命令即可完成替换:

# GNU sed(大部分Linux发行版默认带的sed版本)写法
sed -i '1!G;h;$!d; s/\(.*\)bye/\1adieu/' file

实现逻辑说明:

  • 逐行读取文件,将所有内容拼接后存入sed的保留空间
  • 读取到最后一行时,用贪婪匹配.*匹配到最后一个bye之前的所有内容,将bye替换为目标值

内容的提问来源于stack exchange,提问作者Jota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:06:06