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

SED正则贪婪匹配问题:如何匹配首个@符号修正替换结果

修正sed正则匹配首个@符号的问题

原执行的sed命令:

sed -i "" 's/\(.*\)\( @[^@]*\)/path:*\1*\2/' "$OUTPUT_LOCATION"

输入内容:

/Tests/UnitTests/ViewControllers/Test.UnitTest.swift @team1
/Tests/UnitTests/Auth.UnitTest.swift @team2
/Modules/Stuff/ @team1 @team2

错误输出(最后一行*位置错误):

path:*/Tests/UnitTests/ViewControllers/Test.UnitTest.swift* @team1
path:*/Tests/UnitTests/Auth.UnitTest.swift* @team1
path:*/Modules/Stuff/ @team1* @team2

修正后的命令

sed -i "" 's/\([^@]*\)\( @.*\)/path:*\1*\2/' "$OUTPUT_LOCATION"

修正逻辑

原正则中的.*是贪婪匹配,会尽可能匹配到最后一个 @前的所有内容,导致最后一行中\1错误捕获了/Modules/Stuff/ @team1,最终*被插在@team1之后。

修正后的正则用[^@]*替代.*,[^@]*会精准匹配首个@符号之前的所有字符(路径部分不含@),确保\1只捕获路径内容,\2捕获从首个 @开始的所有后续内容,让*正确包裹路径部分。

正确输出

path:*/Tests/UnitTests/ViewControllers/Test.UnitTest.swift* @team1
path:*/Tests/UnitTests/Auth.UnitTest.swift* @team1
path:*/Modules/Stuff/* @team1 @team2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:34:51