Unix shell替换文件中包含反引号的单词

时间:2016-05-12 19:07:30

标签: shell unix sed scripting backticks

我有一个sql文件(samplesqlfile),我想用另一个字符串替换包含反引号的字符串。以下是代码。

actualtext="FROM sampledatabase.\`Datatype\`"
replacetext="FROM sampledatabase.\`Datatype_details\`"
sed -i "s/\<${actualtext}\>/${replacetext}/g" samplesqlfile

这不起作用。要替换的实际单词是

FROM sampledatabase.`Datatype`

我添加了反斜杠来逃避反击。但它仍然无法正常工作。请帮忙。

1 个答案:

答案 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选项。当然,对于您的预期用途,请将其添加回来。