我有一个叫做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,char 44:未终止的命令
我做错了什么?我怎么才能修好它?
发布于 2014-10-02 13:47:31
在我看来,你只想在这行的末尾加上一些文字。如果是这样,请使用$引用行尾并执行以下替换操作:
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表达式#1,char 44: un终止的‘命令’“。
发布于 2014-10-02 13:47:01
如果将模式放入双引号中,则不需要转义'。
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'&指匹配的字符。
https://stackoverflow.com/questions/26162216
复制相似问题