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

CSH脚本中sed命令\1反向引用失效问题求助

解决CSH脚本中sed反向引用失效问题

你的问题出在sed的正则模式与捕获组写法不匹配:

  • 当使用-r参数时,sed启用扩展正则表达式(ERE),此时捕获组用()表示,不需要加反斜杠转义;而你脚本里写的\(.*\)在ERE模式下会被当成普通的括号字符,无法被识别为捕获分组,导致\1找不到对应的匹配组,反向引用失效。
  • 终端里能正常运行,大概率是你在终端执行时没有加-r参数(使用基础正则表达式BRE),此时\(.*\)才是正确的捕获组写法。

两种修复方案

方案1:移除-r参数,使用基础正则表达式

保持捕获组的转义写法,去掉-r即可:

set varun=(lat[0]in fooin booin again ertyin)
foreach iso (`echo $varun:q`)
      set a=`echo "$iso" | sed 's/\(.*\)in/\1/g'`
      echo $a
end

方案2:保留-r参数,使用扩展正则的捕获组写法

把转义的\(.*\)改成无转义的():

set varun=(lat[0]in fooin booin again ertyin)
foreach iso (`echo $varun:q`)
      set a=`echo "$iso" | sed -r 's/(.*)in/\1/g'`
      echo $a
end

两种方案都能正确提取每个字符串中in之前的部分,比如处理lat[0]in会输出lat[0],fooin输出foo等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:12:15