You need to enable JavaScript to run this app. 前添加内容?", "description": "提供使用Sed工具编写表达式的解决方案,匹配HTML中特定多行
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Sed表达式匹配多行代码,在指定</script>前添加内容?

没问题,我来帮你写一个精准的Sed表达式,专门处理这种在<body>内最后一个带多个闭合大括号的</script>标签前插入内容的需求!

核心思路

我们需要锁定两个关键条件来避免误操作:

  1. 只在<body>标签内部处理,绝对不碰<head>里的脚本
  2. 精准匹配到末尾是多个}}}}(允许}之间有空白字符)的那个</script>标签

针对单行场景的Sed命令(你的示例场景)

如果你的}}}}和</script>在同一行(就像你给出的代码片段那样),直接用这个命令就够了:

sed '/<body>/,/<\/body>/{ /^\s*}\s*}\s*}\s*}\s*<\/script>$/s//要插入的内容\n&/ }' 你的输入文件.html

命令细节拆解:

  • /<body>/,/<\/body>/:划定操作范围,只处理<body>到</body>之间的行,彻底避免误改<head>里的脚本
  • /^\s*}\s*}\s*}\s*}\s*<\/script>$/:匹配以任意空白(空格/制表符)开头,跟着四个}(每个}前后都可以有空白),最后以</script>结尾的行
  • s//要插入的内容\n&/:把匹配到的行替换成「你要插入的内容」+ 换行 + 原来的整行内容(&代表匹配到的完整字符串)

针对多行场景的补充(如果}}}}和</script>分多行)

如果四个}分别在单独的行,最后一行才是</script>,可以用这个支持多行匹配的Sed命令:

sed '/<body>/,/<\/body>/{
  /^\s*}\s*$/{
    N; /^\s*}\s*\n\s*}\s*$/{
      N; /^\s*}\s*\n\s*}\s*\n\s*}\s*$/{
        N; /^\s*}\s*\n\s*}\s*\n\s*}\s*\n\s*<\/script>$/s//要插入的内容\n&/
      }
    }
  }
}' 你的输入文件.html

这个命令会逐步合并相邻行,直到匹配到四个单独的}行 + 最后一行的</script>,再插入你需要的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:42:14