sed -e未知选项`s' - 不是分隔符问题

时间:2017-06-06 11:40:54

标签: sed cmd cmder

我在Windows上使用Cmder并尝试执行以下语句:

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/||")

它神奇地起作用。谁能解释我做错了什么?

编者注:此问题最初被错误标记,而所描述的症状暗示

1 个答案:

答案 0 :(得分:2)

问题中的错误消息是由于Windows cmd将命令与|分开,并将结束括号)添加到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\/}"