2013-06-25 27 views
1

在GNU sed的(和几乎所有的其他分派我知道的):禁用反斜线的脱出功能在sed

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

引起路径的任何发生与新的一行后跟“YC”取代。在我的情况下,VAR始终是用户提供的文字(这是一个Windows路径)。我如何禁用'\'的默认解释? (我知道像一个文件保存VAR和更换所有黑客“\”与VAR“\\”,然后把它传递给SED)

+0

为什么不用双反斜杠替换所有反斜杠? – captcha

+0

是的,这是完全可能的。问题是我有很多这样的变量,这些变量也被用在“复制”命令中,所以我需要为每个变量引入临时变量,而且这些变量很难看。我只想知道这是否可以在单个sed命令中执行。 – PoP

+0

这个问题似乎是windows/shell的具体问题,因为我没有注意到%VAR%会被扩展,扩展“$ VAR”会导致'sed'省略“C:nyc”而不是换行符。 –

回答

3

您可以在Windows命令shell修改%var%

 
>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