Найти и заменить в файле и перезаписать файл не работает, он очищает файл - PullRequest
572 голосов
/ 02 марта 2011

Я хотел бы запустить поиск и замену файла HTML через командную строку.

Моя команда выглядит примерно так:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html > index.html

Когда я запускаю это и смотрю навпоследствии файл пуст.Он удалил содержимое моего файла.

Когда я запустил это после восстановления файла снова:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html

stdout - это содержимое файла, а поиск и заменабыл казнен.

Почему это происходит?

Ответы [ 13 ]

2 голосов
/ 19 ноября 2016

Вы можете использовать Vim в режиме Ex:

ex -sc '%s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g|x' index.html
  1. % выбрать все строки

  2. x сохранить и закрыть

0 голосов
/ 25 августа 2017

При всем уважении к приведенным выше правильным ответам, всегда неплохо бы использовать такие сценарии «пробного запуска», чтобы вы не повредили свой файл и не начали заново с нуля.

Просто заставьте ваш скрипт вывести вывод в командную строку, а не записать его в файл, например, так:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html

ИЛИ

less index.html | sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g 

Таким образом, вы можете увидетьи проверьте вывод команды без усечения файла.

0 голосов
/ 11 августа 2017

Я искал вариант, в котором я мог бы определить диапазон строк и нашел ответ. Например, я хочу изменить host1 на host2 из строки 36-57.

sed '36,57 s/host1/host2/g' myfile.txt > myfile1.txt

Вы также можете использовать опцию gi, чтобы игнорировать регистр символов.

sed '30,40 s/version/story/gi' myfile.txt > myfile1.txt
...