Que*_*low 8 shell bash sed quoting
我需要在几个 SQL 语句中迭代执行搜索和替换:
从:
CREATE TABLE `Old_Name` (
Run Code Online (Sandbox Code Playgroud)
到:
ALTER TABLE `Old_Name` RENAME TO `New_Name`
Run Code Online (Sandbox Code Playgroud)
上面的查询包含反引号`
。我尝试执行以下操作
sed -i -r "s/CREATE TABLE \`$search\` \(/ALTER TABLE \`$search\` RENAME TO \`$replacement\`/g" /query.txt;
Run Code Online (Sandbox Code Playgroud)
它会在命令行上创建一个输入。但是如果我在后面加一个空格$replacement
,它会正常运行。但我不想要后的空间New_Name
。
请注意,我不知道这实际上是由反引号引起的,还是可能是变量名插值问题。无论如何,我该如何解决这个问题?
enz*_*tib 12
为了将转义减少到最低限度,我建议使用单引号sed
,例如
sed 's/pattern/repl/g'
Run Code Online (Sandbox Code Playgroud)
(在单引号中,您可以自由地使用反引号而无需担心和逃避)。
如果您需要在sed
脚本中使用 shell 变量,请将单引号和双引号放在一起,如下例所示
var="bbb"
thing=foo
sed 's/aaa'"${var}"'ccc/some'"${thing}"'else/g'
Run Code Online (Sandbox Code Playgroud)
可以更好地将其视为以下串联
's/aaa' + "${var}" + 'ccc/some' + "${thing}" + 'else/g'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7522 次 |
最近记录: |