使用 sed 替换子字符串

使用 sed 替换子字符串

我有一个示例输入文件:

 $ cat test.txt 

 xz:xx.d.r1.latest

现在我想用新值替换某个部分。例如:我想r1r2上面的文本替换,这样新的 o/p 将是

 xz:xx.d.r2.latest

我想使用变量来实现这一点。例如,考虑存储在变量中的要替换的值old和变量中要替换的值new

 $ old=r1
 $ new=r2

现在为了更换,我试过

sed -i 's/'"${old}"'/'"${new}"'/g' test.txt
sed -i "s/$old}/${new}/g" test.txt
sed -i 's/'"$old"'/'"$new"'/g' test.txt
sed -i "s/${old}/${new}/g" test.txt

但它们都不起作用,因为值没有被替换。所以有人能帮助我或告诉我语法是否正确或我遗漏了什么吗?

答案1

如果你使用BSD 的sed(例如在 macOS 上),-i选项是非标准 FreeBSD 扩展,它需要一个参数。因此,为了确保您使用正确的交叉兼容语法,您应该将其更改为:

sed -i'.bak' ... # rest of the command

除此之外,你的命令都很好。例如

sed -i'.bak' 's/'"${old}"'/'"${new}"'/g' test.txt

在 WSL(Windows 上的 Ubuntu)上的 Bash shell 中测试。

相关内容