1

Я хочу сделать что-то подобное, но я не уверен, как.

Я хочу обновить export.version = '2.0.0' до нового значения exports.version = '2.0.1'

С помощью:

sed -i '.bak' 's/'2.0.0'/'2.0.1'/g' phantomjs.js

Но это может вызвать проблемы у меня что-то еще с 2.0.0

sed -i '.bak' 's/exports.version = '2.0.0'/exports.version = '2.0.1'/g' phantomjs.js

Короче говоря, как правильно кормить sed шаблоном export.version = '2.0.0'

uname -a

15.0.0 Дарвин Кернел Версия 15.0.0: Сб 19 сентября 15:53:46 PDT 2015; root: xnu-3247.10.11 ~ 1/RELEASE_X86_64 x86_64

Спасибо,

L

2 ответа2

1

Попробуй это:

sed -i '.bak' "s/exports\.version = '2\.0\.0'/exports.version = '2.0.1'/g" phantomjs.js
1

Вы пытаетесь поместить одинарные кавычки в строку, заключенную в одинарные кавычки. Если вы сделаете это, вам нужно ввести их так:

$ sed -i .bak 's/exports.version = '\''2.0.0'\''/exports.version = '\''2.0.1'\''/g' phantomjs.js

Невозможно напрямую поместить одинарную кавычку в строку с одинарными кавычками. В приведенном выше примере '\'' работает, потому что первая одинарная кавычка заканчивается предыдущей строкой в одинарных кавычках, \' помещает экранированную одинарную кавычку в командной строке, а следующая ' запускает новую строку в одинарных кавычках.

В вашем конкретном случае вы также можете использовать строку в двойных кавычках:

sed -i .bak "s/exports.version = '2.0.0'/exports.version = '2.0.1'/g" phantomjs.js

Это удобно, потому что можно заключать одинарные кавычки в строку в двойных кавычках без экранирования. Это сложно, потому что вы должны быть уверены, что в строке нет символов, активных для оболочки. В этом случае нет, так что это безопасно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .