sed -e `s' 的未知选项 - 不是定界符问题

sed -e unknown option to `s' - Not a delimiter issue

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

神奇的效果。谁能解释我做错了什么?

编者注:这个问题最初被错误标记了, whereas the symptom described implies

问题中的错误消息是由于 windows cmd 将命令与 | 分开并添加右括号 ) 到 sed 命令。

cmd 等同于 "command substitution" 是 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\/}"