sed 's/$/<br>/' mytext.txt
работал, но выводил все это в командной строке. Я хочу, чтобы он просто делал замену в указанном файле. Должен ли я использовать другой инструмент?
Если у вас есть gnu sed, вы можете использовать параметр -i
, который выполнит замену на месте.
sed -i 's/$/<br>/' mytext.txt
В противном случае вам придется перенаправить на другой файл и переименовать его поверх старого.
sed 's/$/<br>/' mytext.txt > mytext.txt.new && mv mytext.txt.new mytext.txt
Для полноты картины. В Mac OS X (которая использует FreeBSD sed) вы должны использовать дополнительную пустую строку "" для редактирования файла на месте без резервного копирования:
sed -i "" 's/$/<br>/' mytext.txt
В качестве альтернативы использованию sed для редактирования файла на месте без резервного копирования вы можете может использовать ed (1), который, однако, считывает весь файл в память, прежде чем работать с ним.
printf '%s\n' H 'g/$/s//<br>/g' ',p' | ed -s test.file # print to stdout
printf '%s\n' H 'g/$/s//<br>/g' wq | ed -s test.file # in-place file edit
Для получения дополнительной информации о ed (1) см .:
«Редактирование файлов с помощью текстового редактора ed из скриптов»,
Если у вас есть актуальный sed
, просто используйте sed -i
или sed --in-place
, которые изменят сам файл.
Если вам нужна резервная копия, вам нужно указать ее суффикс. Так sed -i.bak
или sed --in-place=.bak
создадут резервный файл с суффиксом .bak
.
Используйте это! Серьезно! Вы оцените это по достоинству, когда в первый раз повредите свой файл из-за неправильно введенной команды sed
или неверного предположения о данных в файле.
Используйте символ перенаправления, т.е.
sed 's/$/<br>/' mytext.txt > mytext2.txt && mv mytext2.txt mytext.txt