sed不会用特殊字符替换字符串

时间:2018-11-03 22:35:46

标签: sed

我一直在尝试替换包含以下几行的某个配置文件:

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

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

我想用 specs:['specs / register.js'] 替换 specs:['specs / login.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 :(得分:1)

尝试:

$ 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'],
...

问题在于[]是正则表达式有效字符。 [引入了一个字符类。您想要[作为文字字符。达到此目的的方法是使用[之类的反斜杠转义\[]也是如此。