在sed调用中转义多个反引号

Modified on: Sat, 30 Jun 2018 09:43:30 +0800

我需要在几个SQL语句中迭代地执行搜索和替换:

自:

CREATE TABLE `Old_Name` (

要:

ALTER TABLE `Old_Name` RENAME TO `New_Name`

上面的查询包含反引号`。我尝试了以下

sed -i -r "s/CREATE TABLE \`$search\` \(/ALTER TABLE \`$search\` RENAME TO \`$replacement\`/g" /query.txt;

它会在命令行上创建一个输入。但是如果我在$replacement后面添加一个空格,它会正常运行。但我不想在New_Name之后的空格。

注意,我不知道这是否实际上是由反引号引起的,或者它可能是变量名插值问题。无论如何,我该如何解决这个问题?

最佳答案

为了将转义减少到最小,我建议在sed中使用单引号,例如

sed 's/pattern/repl/g'

(在单引号中,您可以毫无畏惧地自由使用反引号而无需转义)
如果您需要在sed脚本中使用shell变量,请将单引号和双引号放在一起,如下例所示

var="bbb" thing=foo sed 's/aaa'"${var}"'ccc/some'"${thing}"'else/g'

可以更好地看作以下串联

var="bbb"
thing=foo
sed 's/aaa'"${var}"'ccc/some'"${thing}"'else/g'
作者:enzotib

相关问答

添加新评论