2016-06-07 118 views
1

我正在向shell腳本中注入代理變量。由於兩者之間有空間,我必須避開這條繩子。防止sed創建臨時文件

sed -i -e 's#UseConcMarkSweepGC#UseConcMarkSweepGC $PROXY_ARGS#g' ${TEST_HOME}/bin/test.sh 

現在,這總是產生另一個文件中第i個-e末,所以我結束了test.shtest.sh-e。兩者都是一樣的。目前我在做

rm test.sh-e 

之後sed這是正常工作。我想知道是否有辦法不生成臨時文件?我無法刪除-e,因爲我收到錯誤sed: -i may not be used with stdin

+0

你可能在Mac OS X下,對不對? – fedorqui

+0

是的我在Mac OS X – mles

+0

好的。然後我注意到這個行爲是特定於OS X的,所以我將其作爲一個重複的地方關閉,chepner會很好地解釋它。 – fedorqui

回答

4

這是因爲要放置標誌的順序,如果你是在一個非GNU SED,需要-i有一個說法:

sed -i -e '...' 
# ^^ ^^ 
# | | 
# flag| 
#  | 
#  value for it 

這樣,sed理解-e作爲延長要創建的備份文件。

相反,說:

sed -e -i '...' 

或者只是更明確一些擴展,並將其設置爲null,從而創建的備份文件:

sed -i '' -e '...' 

查看更多信息sed: -i may not be used with stdin on Mac OS X

+0

在我的系統上我不能再現行爲,除非我寫'-i-e'沒有空格。你的答案適用於什麼系統? –

+1

@PatrickTrentin我想這是在Mac OS X. – fedorqui