2013-06-25 2 views
1

В GNU СЭД (и почти все другие дистрибутивы я знаю):отключить убегающую функцию обратной косой черты в SED

SET VAR=C:\nyc 
sed "s/PATH/%VAR%/g" file.txt 

вызывает любое вхождение переменной PATH должен быть заменен на новую строку, затем «Ус» , В моем случае VAR всегда является предоставленным пользователем литералом (это путь к Windows). Как отключить интерпретацию по умолчанию «\»? (Я знаю о писак, как сохранение УАК в файле и заменить все «\» с «\\» в УАК, а затем передавая его в СЭД)

+0

Почему бы не заменить все обратные косые черты двойной обратной косой чертой? – captcha

+0

Да, это вполне возможно. Проблема в том, что у меня есть много таких переменных, которые также используются в командах «копировать», поэтому мне нужно будет ввести временные параметры для каждого и того, что уродливо. Мне просто нравится знать, возможно ли это в одной команде sed. – PoP

+0

Вопрос выглядит как windows/shell, так как в оболочке, о которой я знаю, будет% VAR% быть расширена, а расширение «$ VAR» приведет к тому, что 'sed' будет игнорировать« C: nyc », а не новую строку. –

ответ

3

вы можете изменить %var% в командной оболочке с Windows:

 
>type file 
PATH 
PATH 

>set var=C:\nyc 

>sed "s/PATH/%VAR%/g" file 
C: 
yc 
C: 
yc 

>set var=%var:\=\\% 

>echo %var% 
C:\\nyc 

>sed "s/PATH/%VAR%/g" file 
C:\nyc 
C:\nyc 
+0

Спасибо. Это полезный трюк, который нужно знать и действительно решает проблему каким-то образом, используя% VAR: \ = \\% в sed вместо% VAR%. Хотя кажется, что просто нет никакого способа сделать это непосредственно в sed без такого волшебства. – PoP