2017-06-06 196 views
0

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

它神奇地運行。任何人都可以解釋我做錯了什麼?

編者按:本問題最初被錯誤標記爲,而描述的症狀暗示

+0

看起來像''''是你的修飾符....爲你的方便而創造一個不存在的語法不是要走的路。 –

+0

您是否需要在Cmder引號中避免反斜槓?現在看起來你所有的報價都搞砸了。 – 123

+0

@KarolyHorvath我需要在正確的方向稍微推動一下。通過你的評論,我明白我做錯了什麼,但不知道如何前進。 – WeyensL

回答

2

在問題的錯誤消息是由於其將與|命令窗口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\/}" 
+0

反引號支持嵌套... – 123

+0

@ 123你的意思是'echo \'echo \\'echo ok \\''' –

+0

是嵌套的 – 123