我在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/||")
它神奇地起作用。谁能解释我做错了什么?
答案 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\/}"