Предупреждение: это опасный метод! Он использует буферы ввода / вывода в linux и с определенными параметрами буферизации ему удается работать с небольшими файлами. Это интересное любопытство. Но не используйте это для реальной ситуации!
Помимо опции -i
sed
Вы можете использовать утилиту tee
.
С man
:
tee - чтение со стандартного ввода и запись в стандартный вывод и файлы
Итак, решение будет:
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee | tee index.html
- здесь tee
повторяется, чтобы убедиться, что конвейер буферизован. Затем все команды в конвейере блокируются, пока они не получат некоторый ввод для работы. Каждая команда в конвейере начинается, когда вышестоящие команды записывают 1 буфер байтов (размер определяется где-то ) на вход команды. Поэтому последняя команда tee index.html
, которая открывает файл для записи и, следовательно, очищает его, выполняется после завершения восходящего конвейера и вывода в буфер внутри конвейера.
Скорее всего, следующее не сработает:
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee index.html
- он будет запускать обе команды конвейера одновременно без какой-либо блокировки. (Без блокировки конвейер должен передавать байты строка за строкой, а не буфер за буфером. То же, что и при запуске cat | sed s/bar/GGG/
. Без блокировки он более интерактивен и обычно конвейеры всего из 2 команд выполняются без буферизации и блокировки. Более длинные конвейеры буферизуются. ) tee index.html
откроет файл для записи и будет очищен. Однако, если вы включите буферизацию всегда, вторая версия тоже будет работать.