【发布时间】:2021-12-24 11:28:41
【问题描述】:
我有一个文件 foo.properties,其内容类似于
foo=bar
# another property
test=true
allNames=alpha:.02,beta:0.25,ph:0.03,delta:1.0,gamma:.5
在我的脚本中,我需要替换与ph 对应的任何值(bash 脚本未知当前值)并将其更改为 0.5。所以文件应该是这样的
foo=bar
# another property
test=true
allNames=alpha:.02,beta:0.25,ph:0.5,delta:1.0,gamma:.5
我知道如果通过使用已知当前值可以轻松完成
sed "s/\,ph\:0.03\,/\,ph\:0.5\,/" foo.properties
但就我而言,我必须实际阅读 allNames 的内容并搜索该值,然后在 for 循环中替换。剩下的一切都得到了照顾,但我无法弄清楚sed/perl 命令。
我尝试使用 sed "s/\,ph\:.*\,/\,ph\:0.5\,/" foo.properties 和一些变体,但没有奏效。
【问题讨论】:
-
0.5是预先确定的值吗?还是我们应该使用gamma的值(在这种情况下为.5)?还是您提到0.5和gamma恰好是一样的只是巧合?您会一直更改字段 (?)ph的值,还是会不时更改,如果是,您能否提供有关alNames记录的分隔符的更多详细信息? -
0.5 是预先确定的。基本上这个 sed 命令是脚本的一部分。我需要做的是从类似
my_script.sh --name "ph:0.5,gamma:0.7"的命令行参数中获取值并替换为这些值。我想我可以通过循环迭代来处理其余的事情,但无法计算 sed 命令。我试过sed "s/\,ph\:.*,/\,ph\:0.5,/",但也没有用。它替换了后续值 -
对不起,如果我对某些值的
=拼写错误让您感到困惑。基本上这是 java 属性文件,其中键值对由:分隔,我需要通过 bash 脚本替换其中的一些。 -
@JavaLearner 一旦你接受了这个问题的答案,你就应该问一个关于如何做你在your comment 中描述的事情的新问题,因为正确的做法是不会的在 shell 循环中多次调用这个问题的答案,请参阅why-is-using-a-shell-loop-to-process-text-considered-bad-practice。