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/||")
神奇的效果。谁能解释我做错了什么?
编者注:这个问题最初被错误标记了bash, whereas the symptom described implies cmd。
问题中的错误消息是由于 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\/}"
我在 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/||")
神奇的效果。谁能解释我做错了什么?
编者注:这个问题最初被错误标记了bash, whereas the symptom described implies cmd。
问题中的错误消息是由于 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\/}"