我无法通过 sed 命令更新变量

我无法通过 sed 命令更新变量

我已经分配了两个变量但无法更新

x=$(cat /scratch/env.properties | grep ConfigPath)
y=$(ConfigPath=/scratch/a/b)

然后 sed 替换 env.properties 中的 ConfigPath

sed 's/$x/$y/' env.properties

这不会更新 $y 中指定的 env.properties 中的 ConfigPath

答案1

首先,你不需要catwith grep.足够了:

x="$(grep ConfigPath /scratch/env.properties)"

其次,我相信这不是您想要的作业:

y=$(ConfigPath=/scratch/a/b)

如果你想让变量y保存ConfigPath=/scratch/a/b字符串,它应该是:

y="ConfigPath=/scratch/a/b"

$(...)是一个Bash 中的命令替换

第三,您应该在命令中使用双引号sed来使 shell 展开xy

sed "s/$x/$y/" env.properties

另请注意,/在使用 Unix 路径时这是一个糟糕的选择,因为它是分隔符。使用另一个字符,例如逗号:

sed "s,$x,$y," env.properties

正如用户指出的 善行难陀 在下面的评论中,您可以通过sed仅使用并确保它ConfigPath位于行的开头来使这变得更容易和更好:

sed "s,^ConfigPath=.*$,ConfigPath=/scratch/a/b," env.properties

相关内容