![未终止的 s 命令,带有特殊字符的种子和 sed](https://linux22.com/image/218105/%E6%9C%AA%E7%BB%88%E6%AD%A2%E7%9A%84%20s%20%E5%91%BD%E4%BB%A4%EF%BC%8C%E5%B8%A6%E6%9C%89%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E7%9A%84%E7%A7%8D%E5%AD%90%E5%92%8C%20sed%20.png)
我在 $VALUE 的内容中有特殊字符,我想将其添加到文件 ( $FILE
) 中。
当我运行这个命令时:
sed -i "s|T_VALUE|$VALUE|" "$FILE"
我有一个错误未终止 s 命令
我看到一些帖子说我需要转义特殊字符,但我不知道它们是$VALUE
动态值。我该如何解决这个问题?
答案1
您可以使用 Perl 进行更精美的引用。为了避免混淆,您可以通过环境变量传递参数。
$ SUB_LH='?|'
$ SUB_RH='/\'
$ cat mydata.txt
x?|y
?|ab?|
$ SUB_LH=$SUB_LH SUB_RH=$SUB_RH perl -p -i.bak -e 's/\Q$ENV{SUB_LH}\E/$ENV{SUB_RH}/g' mydata.txt
$ cat mydata.txt
x/\y
/\ab/\