我将代理变量注入shell脚本。我必须逃避字符串,因为它们之间有空格。
sed -i -e 's#UseConcMarkSweepGC#UseConcMarkSweepGC $PROXY_ARGS#g' ${TEST_HOME}/bin/test.sh
现在这总是在最后生成另一个-e
文件,所以我最终得到test.sh
和test.sh-e
。两者都是一样的。目前我正在做
rm test.sh-e
在sed
之后正常工作。我想知道是否有办法不生成临时文件?我无法删除-e
,因为我收到错误sed: -i may not be used with stdin
。
答案 0 :(得分:4)
这是因为您放置标志的顺序,如果您在非GNU sed下需要-i
有一个参数:
sed -i -e '...'
# ^^ ^^
# | |
# flag|
# |
# value for it
像这样,sed
将-e
理解为要创建的备份文件的扩展名。
相反,请说:
sed -e -i '...'
或者只是明确扩展并将其设置为null,以便不创建备份文件:
sed -i '' -e '...'