2015-08-01 4 views
1

ОС: Debian Jessie 64
СЭД (GNU СЭД) 4.2.2
SED заменить точка точка слэш, но эс слэш получил заменить

я должен заменить мой путь от ../ к ../ ../
Тестирование файла.

$ 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}); 

Как я могу защитить вторую позицию каждой линии от замены?

ответ

3

Вам нужно избегать всех точек, чтобы они соответствовали символу буквальной точки или иначе, неэкранированная точка соответствовала бы любому символу. Так что ваше регулярное выражение соответствует ../, а также 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'); 
+0

Спасибо. Это мои новые знания. Я не так много знаю о регулярном выражении. Я продолжаю учиться на этом. (FYI мой фон - физика и математика в CS) – Sarit