我使用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的输出,那么我得到了正确的输出。如果我重定向到一个新文件,一切正常。
答案 0 :(得分:15)
这很正常。你不能在这样的管道中读写同一个文件。 (这将与sed之外的其他工具失败。)
改为使用就地标志-i
:
sed -i 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php
答案 1 :(得分:4)
sed将您的文件作为流读取并输出流。一旦您执行重定向到您的文件中的内容被覆盖,并且由于该文件正在被读取为流,它甚至还没有开始被sed读取。当sed确实开始读取文件时它是空的,所以它立即完成而没有输出。
使用-i
进行就地编辑:
sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php
答案 2 :(得分:2)
重定向打开输出文件,将其截断。这与sed
打开它以进行阅读同时发生,因此sed
会看到截断的版本。您应该将输出重定向到另一个文件以避免破坏输入,或使用sed
的就地编辑模式而不是使用重定向:
sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php