用包含变量中的空格的 sed 替换文本

Oli*_*pel 3 linux bash sed

我尝试替换文本文件中的一些文本。在我的脚本中,我存储了要在两个变量中查找和替换的文本:

$currentProductName='hello'
$configProductName='byebye'
Run Code Online (Sandbox Code Playgroud)

替换是用这一行完成的:

sed -i'.bak' 's/$currentProductName/$configProductName/g' "$projectFile"
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我的任何变量都包含空格。如果$configProductName设置为hello worldsed命令不能按预期工作。

我已经尝试过这个,但它也不起作用:

sed -i'.bak' 's/"$currentProductName"/"$configProductName"/g' "$projectFile"
sed -i'.bak' 's/\$currentProductName/\$configProductName/g' "$projectFile"
Run Code Online (Sandbox Code Playgroud)

我必须如何更改线路才能按预期工作?

Ini*_*ian 6

为了保留空格,您需要用双引号引用变量并再次用单引号将其包裹起来。通过这种方式,您可以控制$需要扩展哪些前缀为前缀的变量。

configProductName='hello world'
Run Code Online (Sandbox Code Playgroud)

使用如下sed操作,并在-i发现它按预期工作后添加标志。

sed 's/$currentProductName/'"$configProductName"'/g' file
hello world='hello'
$configProductName='byebye'
Run Code Online (Sandbox Code Playgroud)