我使用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的输出,则得到正确的输出。如果我重定向到一个新文件,一切正常。
发布于 2012-03-27 16:13:16
这很正常。您不能在这样的管道中读取和写入同一个文件。(对于sed以外的其他实用程序,这将失败)。
改为使用就地标志-i:
sed -i 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php发布于 2012-03-27 16:12:50
sed以流的形式读取您的文件,并输出流。一旦您对文件执行重定向,内容就会被覆盖,并且由于该文件被读取为流,它甚至还没有开始由sed读取。当sed开始读取文件时,它是空的,因此它立即结束,没有输出。
使用-i进行就地编辑,而不是:
sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php发布于 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
https://stackoverflow.com/questions/9893445
复制相似问题