sed не заменяет строку специальными символами - PullRequest
0 голосов
/ 04 ноября 2018

Я пытался заменить определенный файл конфигурации, который содержит следующие строки:

exports.config = {
  uncomment in case of directConnect = false 
  seleniumAddress: 'http://localhost:4444/wd/hub',

  //===run only one spec=== 
  specs: ['specs/login.js'],
...

И я хочу заменить спецификации : ['specs / login.js'], на спецификации : ['specs / register.js'],

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

sudo sed -i -e "s/specs: ['specs\/login.js']/specs: ['specs\/register.js']/g" conf.js

Строка осталась прежней.

line_old='specs: [\'specs\/login.js\']'
line_new='specs: [\'specs\/register.js\']'
sed -i -e "s%$line_old%$line_new%g" conf.js

Но все равно это не сработало. Есть идеи?

1 Ответ

0 голосов
/ 04 ноября 2018

Попробуйте:

$ sed -e "s/specs: \['specs\/login.js'\]/specs: ['specs\/register.js']/g" conf.js
exports.config = {
  uncomment in case of directConnect = false 
  seleniumAddress: 'http://localhost:4444/wd/hub',

  //===run only one spec=== 
  specs: ['specs/register.js'],
...

Проблема в том, что [ и ] являются регулярными символами. [ вводит класс персонажа. Вы хотите [ как буквальный символ. Чтобы получить это, нужно уйти от [ с обратной косой чертой, как \[. Аналогично для ].

...