Bash:如何使用 sed 只替换文件中最后一次出现的位置?

2023-12-28

有一个包含重复注释行的文件,例如:

# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"

我只想在最后一次出现之后添加一行

# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"
ScriptAlias /cgi-bin/ "mypath"

为此,我使用以下命令:

sed -i 's:^\(.*ScriptAlias /cgi-bin/.*\):\1 \nScriptAlias /cgi-bin/ "mypath":' file

但这会导致每次出现后添加我的行,例如:

# ScriptAlias /cgi-bin/ "somepath"
ScriptAlias /cgi-bin/ "mypath"
# ScriptAlias /cgi-bin/ "otherpath"
ScriptAlias /cgi-bin/ "mypath"

我如何告诉 sed 仅替换最后一个出现的位置?

EDITED:
如果无法使用 sed 解决它(如评论中所述),请提供达到相同结果的替代方案,谢谢。



EDITED:
重复的行可以分开,并且它们之间可以有其他行,例如

# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"

# ScriptAlias /cgi-bin/ "another-path"
ScriptAlias /foo/ "just-jump"
# ScriptAlias /cgi-bin/ "that's the last"

Use tac http://man.cx/tac所以你打印你的新行first当你看到这个模式的时候:

tac file | awk '/ScriptAlias/ && ! seen {print "new line"; seen=1} {print}' | tac
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash:如何使用 sed 只替换文件中最后一次出现的位置? 的相关文章

随机推荐

  • 显示 (head .unit ) = Agda 中的 head

    我试图证明 Agda 中的一个简单引理 我认为这是正确的 如果向量有两个以上元素 则取其head继采取init与取其相同head立即地 我将其表述如下 lem headInit l xs Vec suc suc l gt head init
  • 在 Doctrine 中,如何忽略更新架构命令中的特定列?

    我有我的映射实体 named Product 只有两列 id and name 如果我手动添加另一列 即stock qty直接使用SQL语句 架构更新工具将远程它 当然 如何防止 Doctrine 删除我的自定义列 而不是映射到我的实体 相
  • 如何在 HTTP 查询字符串中发送 NULL?

    我正在开发一个 API 它可以接受主要三种数据类型作为查询字符串参数的值 boolean string numeric integer or float 默认情况下 所有内容都以字符串检索 我认为没有办法解决这个问题 但参数配置了类型 以便
  • 拥有大量小方法是否有助于 JIT 编译器优化?

    在最近关于如何优化某些代码的讨论中 我被告知将代码分解为许多小方法可以显着提高性能 因为 JIT 编译器不喜欢优化大型方法 我对此不确定 因为似乎 JIT 编译器本身应该能够识别独立的代码段 无论它们是否在自己的方法中 谁能证实或反驳这一说
  • 检查 NSDictionary 中是否存在键

    我如何检查它是否存在 dataArray objectAtIndex indexPathSet row valueForKey SetEntries 我想知道这个密钥是否存在 我怎样才能做到这一点 非常感谢 编辑 dataArray 中有对
  • 如何使 ttk.Scale 表现得更像 tk.Scale?

    Ttk 版本中还存在一些 Tk 小部件 通常它们具有相同的一般行为 但使用 样式 和 主题 而不是每个实例的外观属性 例如bg ETC 这很好 因为 Ttk 小部件默认采用操作系统窗口管理器的 标准外观 无需配置任何有关外观的内容 然而 由
  • 完美的makefile

    我想用make http en wikipedia org wiki Make 28software 29结合获得模块化构建持续集成 http en wikipedia org wiki Continuous integration 自动单
  • 为什么不需要资格?

    好的 我将发布完整的程序 即使它有无关的内容并且有问题的代码是死代码 include
  • 如何在 .NET 中查找串行端口设备及其驱动程序名称?

    我有一个通过串口连接到计算机的设备 我知道在 NET中打开端口我可以通过COM号调用该端口 例如 SerialPort s new SerialPort COM9 s Open 调用 COM9 上的设备 但是 如果我在另一台计算机上运行我的
  • SQL Server 中的 mysql 'SHOW PROCESSLIST' 相当于什么?

    我们正在转换为SQL Server from MySQL 我试图弄清楚为什么要打电话给sqsh没有回来 我怀疑有一些我不知道的锁 您如何了解正在发生的情况 最好通过数据库连接 您可以查看 sp who 和 sp who2 以查看它们是否为您
  • SBT 中的子项目依赖关系

    我在 SBT 子项目上遇到了一个奇怪的问题 我认为这与依赖关系有关 这是我的设置 我有一个 SBT 项目 有两个子项目 A 和 B A 包含一个类和伴生对象MyA B 取决于 A B 包含一个对象MyB其中有一个主要方法 当我尝试执行时My
  • 尝试构建一个简单的 C# 应用程序来控制我的音量混合器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想做的就是构建一个简单的应用程序来控制我的音量混合器 我更喜欢使用 c 但我的印象是它是一种太高级的语言 无法做这样的事情 我正在寻
  • 尝试 WSO2 IoT 3.3.0 android 注册时如何修复错误“注册失败”?

    我在虚拟机中设置了一个新的服务器 Windows 2012R2 下载最新的active mq和Apache ant 使用Oracle JDK 8u192 安装和设置 WSO2 IoT 应用程序后 我无法注册 Android 设备 我按照 3
  • c# 递归反射和通用列表设置默认属性

    我正在尝试使用反射来实现以下目标 我需要一个传入对象的方法 该方法将使用子对象递归实例化该对象 并使用默认值设置属性 我需要将整个对象实例化为所需的多个级别 此方法需要能够处理具有多个属性的对象 这些属性将是其他对象的通用列表 这是我的示例
  • Redshift:创建一个带有默认为 Now() 的时间戳列的表

    有没有办法创建一个时间戳列默认为现在的表 以下任一操作在创建时成功 但在插入时失败 CREATE TABLE MyTable device id VARCHAR 64 NOT NULL encode lzo app id VARCHAR 1
  • Django 如何在不刷新或重新加载页面的情况下插入数据

    在用户插入数据后 django 如何返回当前页面 request post 设想 如果老师插入学生的成绩 当前页面将重新加载或刷新 我不知道是否可以通过使用重定向来实现它 def grades request V insert data S
  • document.getElementById.style.backgroundImage 不起作用

    我想根据页面的地址为 div 分配不同的背景图像 例如 如果我的 url 是http www mywebsite com mysubdirectory http www mywebsite com mysubdirectory 我使用以下代
  • 我收到错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 负载错误”

    我通过 JavaScript 发送交易 Metamask 打开传输对话框 我确定 我在元掩码中收到错误消息 inpage js 1 MetaMask RPC 错误 错误 错误 ethjs rpc 有效负载的 rpc 错误 id 380169
  • 代码高尔夫:有限状态机!

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 有限状态机 确定性有限状态机是一种简单的计算模型 在计算机科学基础课程中广泛用作自动机理论的介
  • Bash:如何使用 sed 只替换文件中最后一次出现的位置?

    有一个包含重复注释行的文件 例如 ScriptAlias cgi bin somepath ScriptAlias cgi bin otherpath 我只想在最后一次出现之后添加一行 ScriptAlias cgi bin somepat