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

如何使用sed/perl/awk查找替换properties文件中ph对应的未知值

你之前的sed命令失效是因为.*属于贪婪匹配规则,会从ph:后的位置一直匹配到整行末尾的最后一个逗号,导致中间的delta:1.0,gamma:.5等内容被误匹配覆盖。

方案1:sed(推荐,兼容性好)

使用否定字符集[^,]*替代贪婪匹配的.*,该规则只会匹配ph:后到下一个逗号前的所有内容,不会越界匹配后续字段。
如果需要限定仅修改allNames开头的行(避免其他行存在相同ph:字段被误改),使用以下命令:

# Linux 环境直接修改原文件
sed -i '/^allNames=/ s/,ph:[^,]*/,ph:0.5/' foo.properties

# macOS 环境直接修改原文件
sed -i '' '/^allNames=/ s/,ph:[^,]*/,ph:0.5/' foo.properties

# 仅预览修改效果不修改原文件,去掉-i参数即可
sed '/^allNames=/ s/,ph:[^,]*/,ph:0.5/' foo.properties

如果你的场景中ph可能出现在allNames的第一个值位置(比如allNames=ph:0.03,alpha:.02...),可以用更通用的正则兼容该情况:

sed -i '/^allNames=/ s/\([,=]\)ph:[^,]*/\1ph:0.5/' foo.properties

方案2:perl 实现

如果你更习惯perl语法,可以使用非贪婪匹配.*?结合前后向断言实现相同效果,逻辑更简洁:

# 直接修改原文件
perl -i -pe 's/(?<=,ph:).*?(?=,)/0.5/' foo.properties

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:10