【问题标题】:Prevent sed from creating a temporary file [duplicate]防止 sed 创建临时文件 [重复]
【发布时间】:2016-06-07 09:41:23
【问题描述】:

我将代理变量注入到 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

【问题讨论】:

  • 你可能在 Mac OS X 下,是吗?
  • 是的,我在 Mac OS X 上
  • 好的。然后我注意到该行为是特定于 OS X 的,因此我将其作为副本关闭,chepner 对此进行了很好的解释。

标签: bash macos shell sed


【解决方案1】:

这是因为您放置标志的顺序,如果您在非 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中查看更多信息。

【讨论】:

  • 在我的系统上,除非我写 -i-e 没有空格,否则我无法重现该行为。您的答案适用于哪个系统?
  • @PatrickTrentin 我猜它在 Mac OS X 中。
猜你喜欢
  • 2014-06-01
  • 1970-01-01
  • 2010-10-19
  • 2021-08-03
  • 1970-01-01
  • 2011-10-25
  • 2013-03-22
  • 2021-08-06
  • 1970-01-01
相关资源
最近更新 更多