【问题标题】:Unix shell replacing a word containing backtick in a fileUnix shell 替换文件中包含反引号的单词
【发布时间】:2016-09-08 19:03:57
【问题描述】:

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

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

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

FROM sampledatabase.`Datatype`

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

【问题讨论】:

    标签: shell unix sed scripting backticks


    【解决方案1】:

    请注意这不起作用:

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

    但这确实:

    $ sed "s/\<${actualtext}/${replacetext}/g" samplesqlfile
    FROM sampledatabase.`Datatype_details`
    

    问题是\&gt;。字符串变量$actualtext 不以单词字符结尾。它以引用结束。因此,\&gt; 永远不会在那里匹配。解决方法是删除\&gt;

    为了澄清,\&gt; 匹配单词字符和非单词字符之间的边界,其中单词字符首先出现。单词字符可以是字母数字或下划线。

    \&gt; 是一个 GNU 扩展。 BSD/OSX sed 下的行为会有所不同。

    为了便于说明,我删除了-i 选项。当然,为了您的预期用途,将其添加回来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-29
      • 2018-10-08
      • 2014-01-18
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多