的sed -e未知的选项'S' - 不是一个分隔符的问题

的sed -e未知的选项'S' - 不是一个分隔符的问题

问题描述:

我在Windows上使用Cmder并试图执行以下语句:每当我发出这个命令我得到了恼人的错误的sed -e未知的选项'S' - 不是一个分隔符的问题

echo "c:\Sources\" + (echo "Modules/ASR/branches/1.9" | sed -e "s|Modules/||") 

sed: -e expression #1, char 13: unknown option to `s' 

但是当我运行它自己的sed命令:

(echo "Modules/ASR/branches/1.9" | sed -e "s|Modules/||") 

它神奇地运行。任何人都可以解释我做错了什么?

编者按:本问题最初被错误标记为,而描述的症状暗示

+0

看起来像''''是你的修饰符....为你的方便而创造一个不存在的语法不是要走的路。 –

+0

您是否需要在Cmder引号中避免反斜杠?现在看起来你所有的报价都搞砸了。 – 123

+0

@KarolyHorvath我需要在正确的方向稍微推动一下。通过你的评论,我明白我做错了什么,但不知道如何前进。 – WeyensL

在问题的错误消息是由于其将与|命令窗口cmd,并增加了闭parenthese )到sed命令。

cmd等效为“命令替换”之后是单引号之间的命令for /f,管道必须与^

for /f %x in ('echo "Modules/ASR/branches/1.9" ^| sed -e "s|Modules/||" ') do @echo "c:\Sources\"%~x 

或者在脚本中使用时,必须加倍的百分比被转义

for /f %%x in ('echo "Modules/ASR/branches/1.9" ^| sed -e "s|Modules/||" ') do @echo "c:\Sources\"%%~x 

否则扩展允许替换模式%var:pat=repl%

set mypath=Modules/ASR/branches/1.9 
echo "c:\Sources\"%mypath:Modules/=% 

在bash相当于

echo 'c:\Sources\'"$(echo "Modules/ASR/branches/1.9" | sed -e "s|Modules/||")" 

也避免推出一个新的进程这可以用变量扩展#进行删除最短的前缀。

mypath="Modules/ASR/branches/1.9" 
echo 'c:\Sources\'"${mypath//Modules\/}" 
+0

反引号支持嵌套... – 123

+0

@ 123你的意思是'echo \'echo \\'echo ok \\''' –

+0

是嵌套的 – 123