bash - 为什么 sed replace + redirect 删除了我的文件?

标签 bash sed io-redirection

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

这是之后的文件

-rw-r--r-- 1 websync www-data 4156 mar 27 12:56 /home/websync/tmp/sitio-oficial/sitios/wp-config.php

这是我运行的命令

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

结果

-rw-r--r-- 1 websync www-data 0 mar 27 13:05 /home/websync/tmp/sitio-oficial/sitios/wp-config.php

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

最佳答案

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

改用就地标志 -i:

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

关于bash - 为什么 sed replace + redirect 删除了我的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893445/

相关文章:

csv - 如何将 csv 文件读入数组并与另一个 csv 文件中的条目进行比较和替换?

sql - 从命令行运行 Sqlite3 脚本

bash - tr 输出到新行

string - 将字符串的一部分提取到bash中的变量

bash - 剪切/格式化docker服务命令

c - 如何确保我正在启动的程序将其标准输出写入我打开的 FD?

mysql - 如何在重定向期间运行 bash 命令 << EOF

mysql - 使用 mysql 数据库

bash - 当使用 '-print' 时,从 'find' 命令中遗漏 '-prune'

linux - 了解 Unix 中的 I/O 重定向