防止sed创建临时文件

时间:2016-06-07 09:41:24

标签: bash macos shell sed

我将代理变量注入shell脚本。我必须逃避字符串,因为它们之间有空格。

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

现在这总是在最后生成另一个-e文件,所以我最终得到test.shtest.sh-e。两者都是一样的。目前我正在做

rm test.sh-e

sed之后正常工作。我想知道是否有办法不生成临时文件?我无法删除-e,因为我收到错误sed: -i may not be used with stdin

1 个答案:

答案 0 :(得分: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中查看更多信息。