忽略包含\和多个空格的变量usnig sed命令

时间:2016-06-20 09:50:00

标签: linux shell replace sed

我有两个变量,

first= new pool ser/@10.25.89.322 
second=ESX_10.2.3.4@10.52.33.21

我想用新池ESX_10.2.3.4@10.52.33.21替换ser/@10.25.89.322,并且还希望在新词之前删除空格。

我试过了,

sed -i -e "s/${second}/"${first//\\/\\\\}"/g"

sed -i -e "s/${second}/"${first//\\[ ]*/\\\\}"/g"
sed -i -e "s/${second}/"${first//\\ */ *\\\\}"/g"

我不想删除空格,只想按原样替换(“new”之前的空格除外)。

1 个答案:

答案 0 :(得分:0)

尝试一下:

sed -i "/${second}/ {s:${second}:${first//\\/\\\\}:g ; s/ new /new /}"

在替换后的第一次出现的space中删除了new

此外,在下面的测试中,添加了双引号:

$ first=" new pool ser/@10.25.89.322" 
$ second=ESX_10.2.3.4@10.52.33.21
$ sed -i "/${second}/ {s:${second}:${first//\\/\\\\}:g ; s/ new /new /}" mytestfile.txt