的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/||")
它神奇地运行。任何人都可以解释我做错了什么?
答
在问题的错误消息是由于其将与|
命令窗口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\/}"
看起来像''''是你的修饰符....为你的方便而创造一个不存在的语法不是要走的路。 –
您是否需要在Cmder引号中避免反斜杠?现在看起来你所有的报价都搞砸了。 – 123
@KarolyHorvath我需要在正确的方向稍微推动一下。通过你的评论,我明白我做错了什么,但不知道如何前进。 – WeyensL