Как предотвратить, чтобы команда sed перезаписывала исходный файл и выводила новый файл?
В UPPER.txt
файл, мне нужно заменить APPLE
а также ORANGE
с некапитальной apple
а также orange
, Мне также нужно сохранить старый файл UPPER.txt
как это было, и создать новый файл lower.txt
, Я использую следующие команды:
sed 's/APPLE/apple/g' UPPER.txt > lower.txt
sed 's/ORANGE/orange/g' UPPER.txt > lower.txt
Но проблема в том, что после запуска вышеуказанной команды UPPER.txt
а также lower.txt
стать таким же, содержащим некапитальные предметы. Я хочу UPPER.txt
остаться, как было изначально.
Как сохранить резервную копию исходного файла после использования sed? Поскольку я хочу использовать эту команду в C++, используя system(command)
для работы с файлами я бы хотел, чтобы все команды были записаны в одну строку, а затем я мог бы передать ее как строку системной команде.
2 ответа
Упомянутая вами команда sed 's/APPLE/apple/g' UPPER.txt > lower.txt
не следует перезаписывать оригинал UPPER.txt
, так как sed
поведение по умолчанию для записи lower.txt
, Вы сделали что-то еще, что могло перезаписать исходный файл. sed
не трогать оригинальный файл, если вы не предоставите -i
флаг. Для ваших целей я бы предложил сначала сделать резервную копию исходного файла, иначе просто скопируйте его.
Обратите внимание на то, что system()
звонок - это своего рода зло, и его нельзя использовать,
Я думаю, что у вас есть некоторые недоразумения.
sed
Команда выводит результат только в bash. Это не имеет ничего общего с оригинальным файлом. >
Оператор только записывает результат в файл.
Однако, если вы хотите, есть вариант -i
который может редактировать оригинальный файл. С -i
опция поставляется с резервным суффиксом (необязательно).
$ cat UPPERCASE.txt
APPLE
$ sed 's/APPLE/apple/g' UPPERCASE.txt
apple
$ sed 's/APPLE/apple/g' UPPERCASE.txt > lowercase.txt
$ cat UPPERCASE.txt
APPLE
$ cat lowercase.txt
apple
$ sed 's/APPLE/apple/g' -i[BACKUP] UPPERCASE.txt
$ cat UPPERCASE.txt
apple
$ ls
UPPERCASE.txt UPPERCASE.txt[BACKUP] lowercase.txt
Здесь [BACKUP]
файл является исходным файлом.