bash使用sed从变量添加字符串

bash使用sed从变量添加字符串,bash,sed,Bash,Sed,我需要使用shell脚本(sed)编辑文件, 当我在字符串中使用“空格”时,我似乎无法让它工作 这是bash脚本: ##Edit instancegroup files with relevant cluster CLUSTER_NAME=clusters.dev10.k8s.local oldcluster="kops.k8s.io/cluster:" newcluster="kops.k8s.io/cluster: ${CLUSTER_NAME}" sed -i 's@'${oldclust

我需要使用shell脚本(sed)编辑文件, 当我在字符串中使用“空格”时,我似乎无法让它工作

这是bash脚本:

##Edit instancegroup files with relevant cluster
CLUSTER_NAME=clusters.dev10.k8s.local
oldcluster="kops.k8s.io/cluster:"
newcluster="kops.k8s.io/cluster: ${CLUSTER_NAME}"
sed -i 's@'${oldcluster}'@'${newcluster}'@g' myfile
这是我的文件:

apiVersion: kops/v1alpha2
kind: InstanceGroup
metadata:
  creationTimestamp: 2018-01-03T10:45:43Z
  labels:
    kops.k8s.io/cluster:
这就是我得到的错误:

administrator@JenkisSrv01:~/awscluster/instancegroup$ ./try.sh
sed: -e expression #1, char 43: unterminated `s' command
当我从第4行删除空间时,它运行良好:

newcluster="kops.k8s.io/cluster:${CLUSTER_NAME}"

在变量周围添加双引号

sed -i 's@'"${oldcluster}"'@'"${newcluster}"'@g' myfile

在变量周围添加双引号

sed -i 's@'"${oldcluster}"'@'"${newcluster}"'@g' myfile

不带引号的空格分隔参数。引用变量:

sed -i 's@'"${oldcluster}"'@'"${newcluster}"'@g' myfile
或者更容易理解

sed -i "s@$oldcluster@$newcluster@g" myfile

请注意,
在正则表达式中有特殊含义,因此
kops.k8s.io/cluster:
匹配,例如
kopsXk8sXio/cluster:
。您需要将点反斜杠以强制执行字面含义。

不带引号的空格分隔参数。引用变量:

sed -i 's@'"${oldcluster}"'@'"${newcluster}"'@g' myfile
或者更容易理解

sed -i "s@$oldcluster@$newcluster@g" myfile
请注意,
在正则表达式中有特殊含义,因此
kops.k8s.io/cluster:
匹配,例如
kopsXk8sXio/cluster:
。你需要反斜杠的点,以迫使字面意思