【发布时间】:2016-01-29 06:50:25
【问题描述】:
我有backup.txt
five six seven
five six seven seven six five
five more here
What about FIVE fIve fivefive fivefivefive fIveFivefiVe?
我是新的.txt
four six seven
four six seven seven six four
four more here
What about four four fourfour fourfourfour fourfourfour?
我想将新文本的第 3 行和第 4 行恢复为 backup.txt 中的状态
five more here
What about FIVE fIve fivefive fivefivefive fIveFivefiVe?
如何使用sed 完成此操作?
所以 new.txt 看起来像
four six seven
four six seven seven six four
five more here
What about FIVE fIve fivefive fivefivefive fIveFivefiVe?
【问题讨论】:
-
我的第一反应是“你不能”。这取决于您的意思,但除非您有前第 4 行的记录(特别是),否则您无法恢复原始版本的区分大小写,因为编辑版本的外观不区分大小写。另外,我假设您的意思是您已经完成了文件的完整传递,然后想要再进行传递以撤消它。编辑时无法有意义地还原内容;
sed没有撤销缓冲机制或类似的东西。它是一个非交互式编辑器;不需要这样的机制。 -
嗨乔纳森,我认为我的问题不是很清楚,很抱歉。我有 new.txt 是我使用 sed 玩过的新文本,我有 backup.txt 是原始文本。有没有办法可以将新文本的第 3 行和第 4 行更改为它们在 backup.txt 中的样子?
-
哦。这算不算?
sed -n '1,2p; 7,8p' new.txt backup.txt?默认不打印;打印前两行(来自new.txt);打印最后两行(来自backup.txt)。它不是很灵活,但是也没有给出场景。或者您可以仅将转换应用于前两行:sed -e '1,2s/five/four/g' backup.txt。 -
是的,行得通!谢谢!有没有办法用 -i 将新的正确输出保存到 new.txt 中?还是其他方法?
-
对于第二个命令(重新编辑),重定向
… > new.txt。首先,不能覆盖new.txt;重定向到另一个文件,然后将新文件移到旧文件上:… > alt.txt; mv alt.txt new.txt。或… > alt.txt; cp alt.txt new.txt; rm alt.txt。如果有指向new.txt的硬链接,这将保留该链接,但mv会破坏它。如果很可能没有这样的链接,那么只需使用mv。