防止sed创建临时文件

mle*_*les 1 macos bash shell sed

我正在将代理变量注入到Shell脚本中。我必须对字符串进行转义,因为它们之间有空格。

sed -i -e 's#UseConcMarkSweepGC#UseConcMarkSweepGC $PROXY_ARGS#g' ${TEST_HOME}/bin/test.sh
Run Code Online (Sandbox Code Playgroud)

现在,这总是-e在末尾生成另一个文件ith ,因此我以test.shand 结尾test.sh-e。两者是相同的。目前我在做

rm test.sh-e
Run Code Online (Sandbox Code Playgroud)

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

fed*_*qui 6

这是因为,如果您处于需要-i参数的非GNU sed下,则将按照放置标志的顺序进行操作:

sed -i -e '...'
#   ^^ ^^
#   |   |
#   flag|
#       |
#       value for it
Run Code Online (Sandbox Code Playgroud)

这样,可以sed理解-e为要创建的备份文件的扩展名。

相反,说:

sed -e -i '...'
Run Code Online (Sandbox Code Playgroud)

或者只是明确说明该扩展名并将其设置为null,这样就不会创建备份文件:

sed -i '' -e '...'
Run Code Online (Sandbox Code Playgroud)

sed中查看更多信息:-i不能与Mac OS X上的stdin一起使用