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

使用Sed无法捕获并替换文件中的花括号相关模式

Sed捕获替换问题的解决方案

原命令的问题

你的命令无效主要有三个原因:

  1. sed默认使用基础正则表达式(BRE),捕获组需要用\( \)包裹,而非()(这是扩展正则ERE的语法)
  2. .*是贪婪匹配,会尽可能匹配最长字符串,容易误匹配多个闭合标签的内容
  3. 原模式要匹配的是{{/tagName}}}(三个右大括号),但你的命令只匹配到两个右大括号,没覆盖第三个

修正后的替换命令

基础正则版本(兼容所有sed)

sed 's/\({{\/[^}]*}}\)}/\1 }/g'
  • 解释:\({{\/[^}]*}}\)精准捕获{{/tagName}}部分([^}]*只匹配非右大括号的字符,避免贪婪误匹配),后面的}匹配第三个右大括号,替换为捕获内容加空格加单个}。

扩展正则版本(更简洁,需加-E选项)

sed -E 's/({{\/[^}]*}})}/\1 }/g'

直接修改文件的命令(-i选项)

Linux(GNU sed)

  • 直接修改文件:
sed -i 's/\({{\/[^}]*}}\)}/\1 }/g' 你的文件名
  • 保留原文件备份(生成文件名.bak):
sed -i.bak 's/\({{\/[^}]*}}\)}/\1 }/g' 你的文件名

macOS(BSD sed)

BSD sed的-i必须指定备份后缀,不需要备份则用空字符串:

  • 不保留备份:
sed -i '' -E 's/({{\/[^}]*}})}/\1 }/g' 你的文件名
  • 保留备份:
sed -i.bak -E 's/({{\/[^}]*}})}/\1 }/g' 你的文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:47:12