почему sed replace + 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, то получаю правильный вывод. Если я перенаправить на новый файл, все работает нормально.

Ответы на вопрос(3)

обрезая его. Это происходит одновременно сsed открыв его для чтения, такsed видит усеченную версию. Вы должны перенаправить вывод в другой файл, чтобы избежать путаницы при вводе, или использоватьsedРежим редактирования на месте вместо перенаправления:

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

Решение Вопроса

вейере, как это. (это не с другими утилитами, кроме sed).

Используйте флаг на месте-i вместо:

sed -i 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php
 jperelli27 мар. 2012 г., 18:31
Да, я ждал 5 минут, согласно stackoverflow. Спасибо!
 jperelli27 мар. 2012 г., 18:23
принято указывать, чтоэто не удастся с другими утилитами
 pancake29 авг. 2013 г., 16:54
Или вы используете следующую команду:BUFFER="$(cat FILENAME)"; echo "$BUFFER" | SOME_COMMAND > FILENAME Однако будьте осторожны, это не то, для чего переменные среды используются, как правило. Оберните его в цикл for, и вы получите массовую обработку файлов!
 brice27 мар. 2012 г., 18:26
@jperelli Вы должны будете принять, а не воззвать :-)

вы выполняете перенаправление в файл, его содержимое перезаписывается, и поскольку этот файл читается как поток, он еще даже не начал читать с помощью sed. Когда sed начинает чтение файла, он пуст, поэтому сразу завершает работу без вывода.

использование-i, вместо этого выполнить редактирование на месте:

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

Ваш ответ на вопрос