使用sed替换文件的内容在bash脚本中不起作用

eri*_*old 0 unix bash command-line sed

sed -e 's/<em\:update.*//g' install.rdf > install.rdf在bash脚本中有以下内容,它可以在命令行上运行,但在bash脚本中,install.rdf会结束一个空白文件.

当我运行sed -e 's/<em\:update.*//g' install.rdf > install.rdf命令行时,从文件中删除了2行.

知道为什么sed -e 's/<em\:update.*//g' install.rdf > install.rdf不在bash脚本中工作吗?

Chr*_*ung 6

试试这个:

sed -i -e 's/<em\:update.*//g' install.rdf
Run Code Online (Sandbox Code Playgroud)

在截断模式下将输出重定向到文件时,文件会在读取之前先截断.因此,结果是一个空文件.使用sed -i避免了这一点.

便携式(并且希望不是太不安全)的解决方案:

(set -C &&
 sed -e 's/<em\:update.*//g' install.rdf > install.rdf.$$ &&
 mv install.rdf.$$ install.rdf)
Run Code Online (Sandbox Code Playgroud)

:-)

  • 但是,`-i`是GNU扩展. (3认同)
  • shell变量$$通常用于非恶意环境,避免共享名称出现问题:`sed ... install.rdf> install.rdf.$$; mv install.rdf.$$ install.rdf`. (2认同)