2014-10-02 16 views
0

У меня есть файл под названием Gemfile. Одна из строк этого файла заключается в следующем:Замена текста пробелом с помощью sed

gem 'my-platform', git: '[email protected]:me/platform-engine.git' 

, и я хочу, чтобы заменить его следующим образом:

gem 'my-platform', git: '[email protected]: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

Что такое Я делаю неправильно? Как я могу это исправить?

ответ

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 выражение # 1, char 44: команда unterminated `s '.

1

Вам не нужно избегать ', если вы поместите шаблон в двойные кавычки.

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: '[email protected]:me/platform-engine.git', branch:'issue-2' 

& относится к совпавших символов.

Смежные вопросы