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

Mac下使用sed删除两模式间内容但保留模式的问题求助

Mac系统下保留标记删除中间内容的sed解决方案

针对你的需求——删除/* React App Start */和/* React App End */之间的所有代码,同时保留这两个标记本身,在Mac的BSD sed环境下可以使用以下命令:

sed -i '' -e '/\/\* React App Start \*\//{p; :a; N; /\/\* React App End \*\//!ba; s/.*\n/\n/}' views/layouts/index.html

命令说明

  • -i '':实现原地编辑文件,空参数表示不生成备份文件;如果需要备份原文件,可以改成-i.bak(执行后会生成index.html.bak备份)
  • /\/\* React App Start \*\//{ ... }:仅对匹配到起始标记的行执行内部逻辑
    • p:先输出起始标记行
    • :a:定义循环标签a
    • N:将下一行内容追加到当前模式空间(处理多行内容)
    • /\/\* React App End \*\//!ba:如果模式空间内还没匹配到结束标记,就跳回标签a继续读取下一行
    • s/.*\n/\n/:把模式空间中起始标记之后到结束标记之前的所有内容替换为空,只保留结束标记行

为什么之前的命令失效?

你之前尝试的{//!d;}命令仅能处理单行内容,当中间的JavaScript代码跨多行时,BSD sed的逐行处理逻辑无法覆盖所有中间行,导致部分内容残留。上述命令通过N和循环标签实现了多行匹配处理,能完整清除标记间的所有内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:15:28