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

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

我需要在几个 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

注意,我不知道这实际上是由反引号引起的还是可能是变量名插值问题。不管怎样,我该如何解决这个问题?

答案1

为了将转义减少到最低限度,我建议使用单引号sed,例如

sed 's/pattern/repl/g'

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

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

可以更好地将其视为以下串联

's/aaa' + "${var}" + 'ccc/some' + "${thing}" + 'else/g'

相关内容