我有一个sql文件(samplesqlfile
),我想用另一个字符串替换包含反引号的字符串。以下是代码。
actualtext="FROM sampledatabase.\`Datatype\`"
replacetext="FROM sampledatabase.\`Datatype_details\`"
sed -i "s/\<${actualtext}\>/${replacetext}/g" samplesqlfile
这不起作用。要替换的实际单词是
FROM sampledatabase.`Datatype`
我添加了反斜杠来逃避反击。但它仍然无法正常工作。请帮忙。
答案 0 :(得分:3)
注意这不起作用:
$ sed "s/\<${actualtext}\>/${replacetext}/g" samplesqlfile
FROM sampledatabase.`Datatype`
但这样做:
$ sed "s/\<${actualtext}/${replacetext}/g" samplesqlfile
FROM sampledatabase.`Datatype_details`
问题是\>
。字符串变量$actualtext
不以单词字符结尾。它以报价结尾。因此,\>
永远不会匹配。解决方案是删除\>
。
为了澄清,\>
匹配单词字符和单词字符首先出现的非单词字符之间的边界。单词字符可以是字母数字或下划线。
\>
是GNU扩展。 BSD / OSX sed下的行为将有所不同。
为了便于说明,我删除了-i
选项。当然,对于您的预期用途,请将其添加回来。