在UPPER.txt
文件中,我需要用非大写的APPLE
and替换and 。我还需要保留旧文件,并生成一个新文件。我使用以下命令: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
我觉得你有一些误解。
该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]
文件是原始文件。