我已经分配了两个变量但无法更新
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
首先,你不需要cat
with 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 展开x
并y
:
sed "s/$x/$y/" env.properties
另请注意,/
在使用 Unix 路径时这是一个糟糕的选择,因为它是分隔符。使用另一个字符,例如逗号:
sed "s,$x,$y," env.properties
正如用户指出的
善行难陀
在下面的评论中,您可以通过sed
仅使用并确保它ConfigPath
位于行的开头来使这变得更容易和更好:
sed "s,^ConfigPath=.*$,ConfigPath=/scratch/a/b," env.properties