【问题标题】:Replacing text with space using sed使用 sed 将文本替换为空格
【发布时间】:2014-11-27 12:35:09
【问题描述】:

我有一个名为 Gemfile 的文件。该文件中的一行是这样的:

gem 'my-platform', git: 'git@github.com:me/platform-engine.git'

我想用这个替换它:

gem 'my-platform', git: 'git@github.com:me/platform-engine.git', branch:'issue-2'

为此我使用了这个命令:

sed -i s#platform-engine.git\'#platform-engine.git\', branch:\'issue-2\'#g Gemfile

但我收到此错误:

sed: -e expression #1, char 44: unterminated `s' command

我做错了什么?我该如何解决?

【问题讨论】:

    标签: sed


    【解决方案1】:

    在我看来,您只是想在行尾附加一些文本。如果是这样,请使用$ 引用行尾并进行此替换:

    sed -i.bak "/platform-engine.git/s/$/, branch:'issue-2'/" Gemfile
    

    这会将给定的文本添加到包含platform-engine.git 的行的末尾。请注意,无需使用/g,因为您只想每行替换一次。

    另请注意,最好创建一个备份文件,以防万一!


    如果您需要使用任何含义的单引号,请使用以下转义策略:

    sed 's/'\''//'
           ^^^^
           just to match as single quote!
    

    测试:

    $ echo "he'llo" | sed 's/'\''//'
    hello
    

    否则你会得到你提到的错误:“sed: -e expression #1, char 44: unterminated `s' command”。

    【讨论】:

      【解决方案2】:

      如果将模式放在双引号内,则无需转义 '

      sed "s~platform-engine.git'~platform-engine.git', branch:'issue-2'~g" file
      

      $ sed "s~platform-engine.git'~&, branch:'issue-2'~g" file
      gem 'my-platform', git: 'git@github.com:me/platform-engine.git', branch:'issue-2'
      

      & 指的是匹配的字符。

      【讨论】:

        猜你喜欢
        • 2015-11-01
        • 2021-03-16
        • 2014-06-22
        • 2010-10-25
        • 2020-09-12
        • 2011-09-30
        • 2021-09-17
        • 1970-01-01
        • 2014-05-21
        相关资源
        最近更新 更多