В 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)
для работы на файлы я хотел бы, чтобы все команды были записаны в одной строке затем, я могу передать ее как строку к системной команде.
Команда Вы упомянули sed 's/APPLE/apple/g' UPPER.txt > lower.txt
не должен перезаписывать оригинал UPPER.txt
, потому что sed
поведение по умолчанию состоит в том, чтобы записать в lower.txt
. Существует что-то еще, что Вы сделали, который, возможно, перезаписал исходный файл. sed
не касается исходного файла, если Вы не обеспечиваете -i
флаг. В Ваших целях я предложил бы сначала делать резервное копирование исходного файла, иначе просто скопировал бы его.
На ноте стороны, знать это system()
вызов является видом зла и не должен использоваться,
Я думаю, что у Вас есть некоторые недоразумения.
sed
управляйте только производит результат в ударе. Это не имеет никакого отношения к исходному файлу. >
оператор только пишет результат в файл.
Однако, если Вы хотите, существует опция -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]
файл является исходным файлом.