![使用 sed 替换子字符串](https://linux22.com/image/1561136/%E4%BD%BF%E7%94%A8%20sed%20%E6%9B%BF%E6%8D%A2%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我有一个示例输入文件:
$ cat test.txt
xz:xx.d.r1.latest
现在我想用新值替换某个部分。例如:我想r1
用r2
上面的文本替换,这样新的 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 中测试。