我必须将我的路径从../替换为../../
测试文件。
$ cat dot.js
path = '../'
我在斜线前加上反斜杠以加入单引号:
sed -i 's/..\//..\/..\//g' dot.js
输出:
path = '../../'
但是,当我使用我的实际文件时。
$ cat dotdot.js
var real_questionHandler = require('../routes/questionHandler_delqid.js');
var questionHandler_delqid = proxyquire('../routes/questionHandler_delqid.js', { 'pg' : pgStub} );
输出:
var real_questionHandler = require('../../rout../../questionHandler_delqid.js');
var questionHandler_delqid = proxyquire('../../rout../../questionHandler_delqid.js', { 'pg' : pgStub} );
如何保护每条线的第二个位置免受替换?
答案 0 :(得分:4)
您需要转义所有点以使其与文字点字符匹配,否则,未转义的点将匹配任何字符。这样你的正则表达式就匹配../
以及es/
sed -i 's/\.\.\//..\/..\//g' dot.js
或强>
sed -i 's~\.\./~../../~g' dot.js
示例:强>
$ echo "require('../routes/questionHandler_delqid.js');" | sed 's~\.\./~../../~g'
require('../../routes/questionHandler_delqid.js');