首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么sed替换+重定向会删除我的文件?

为什么sed替换+重定向会删除我的文件?
EN

Stack Overflow用户
提问于 2012-03-27 16:10:48
回答 3查看 1.7K关注 0票数 7

我使用sed在bash (GNU sed)文件中搜索和替换两个字符串。

这是后面的文件

代码语言:javascript
复制
-rw-r--r-- 1 websync www-data 4156 mar 27 12:56 /home/websync/tmp/sitio-oficial/sitios/wp-config.php

这是我运行的命令

代码语言:javascript
复制
sed 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php > /home/websync/tmp/sitio-oficial/sitios/wp-config.php

和结果

代码语言:javascript
复制
-rw-r--r-- 1 websync www-data 0 mar 27 13:05 /home/websync/tmp/sitio-oficial/sitios/wp-config.php

编辑:如果不重定向sed的输出,则得到正确的输出。如果我重定向到一个新文件,一切正常。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-27 16:13:16

这很正常。您不能在这样的管道中读取和写入同一个文件。(对于sed以外的其他实用程序,这将失败)。

改为使用就地标志-i

代码语言:javascript
复制
sed -i 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php
票数 16
EN

Stack Overflow用户

发布于 2012-03-27 16:12:50

sed以流的形式读取您的文件,并输出流。一旦您对文件执行重定向,内容就会被覆盖,并且由于该文件被读取为流,它甚至还没有开始由sed读取。当sed开始读取文件时,它是空的,因此它立即结束,没有输出。

使用-i进行就地编辑,而不是:

代码语言:javascript
复制
sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php
票数 5
EN

Stack Overflow用户

发布于 2012-03-27 16:14:22

重定向打开文件以便输出,并截断它。这种情况同时发生在sed打开它进行读取时,因此sed看到了截短的版本。您应该将输出重定向到另一个文件,以避免中断输入,或者使用sed的就地编辑模式,而不是使用重定向:

sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9893445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档