使用sed用空格替换文本

时间:2014-10-02 13:44:04

标签: sed

我有一个名为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表达式#1,字符44:未终止的`s'命令

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

2 个答案:

答案 0 :(得分:2)

在我看来,你只想在行尾添加一些文字。如果是这样,请使用$引用行尾并执行此替换:

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'命令"

答案 1 :(得分:1)

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

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

OR

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

&指的是匹配的字符。