2016-06-07 115 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