Как предотвратить команду 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) для работы на файлы я хотел бы, чтобы все команды были записаны в одной строке затем, я могу передать ее как строку к системной команде.

1
задан 22 April 2018 в 02:10

2 ответа

Команда Вы упомянули sed 's/APPLE/apple/g' UPPER.txt > lower.txt не должен перезаписывать оригинал UPPER.txt, потому что sedповедение по умолчанию состоит в том, чтобы записать в lower.txt. Существует что-то еще, что Вы сделали, который, возможно, перезаписал исходный файл. sed не касается исходного файла, если Вы не обеспечиваете -i флаг. В Ваших целях я предложил бы сначала делать резервное копирование исходного файла, иначе просто скопировал бы его.

На ноте стороны, знать это system() вызов является видом зла и не должен использоваться,

2
ответ дан 3 December 2019 в 06:52

Я думаю, что у Вас есть некоторые недоразумения.

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] файл является исходным файлом.

2
ответ дан 3 December 2019 в 06:52

Другие вопросы по тегам:

Похожие вопросы: