在bash中合并行

时间:2017-03-29 08:36:38

标签: bash

我想编写一个恢复文件的脚本,但保留创建回退文件后可能会进行的更改。

有更多细节:有时我会创建一个文件备份(file_orig)。对原始文件也进行一些更改(file_my_changes)。之后,原始文件可以再次更改(file_additional_changes),但在恢复之后我想要备份文件,加上其他更改(file_orig + file_addtional_changes)。通常只退出我的更改。

我在谈论grub.cfg文件,因此预期的可能更改将是添加或删除部分行。

是否可以使用bash脚本完成此操作?

我有两个想法:

  1. 在我要更改的行上方添加一些注释,然后在resotore之前,如果该行与已退出文件中的行不同,则读取注释,这将告诉我究竟要删除哪些内容这条线;

  2. 如果有办法只显示与file_orig和file_additional_changes不同的行部分,则用file_orig中的行+不同的部分替换此行。但我不确定是否可以这样做。

  3. 实施例“

    第1行:这是第1行

    第2行:这是另一个第1行

    是否可以只显示“另一个”?

    当然欢迎任何其他想法!

    谢谢!

2 个答案:

答案 0 :(得分:0)

不清楚,但是如果你使用bash脚本,你可以在2个编辑过的文件和最后一个文件上运行diff,并将那个输出保存到你要保留的地方?这意味着你有一份改变的副本。

或者像其他人一样使用git。

答案 1 :(得分:0)

一种可能性是使用POSIX命令patchdiff

  • 创建备份:

    cp operational-file operational-file.001
    
  • 编辑操作文件。

  • 根据差异创建补丁:

    diff -u operational-file.001 operational-file > operational-file.patch001
    
  • 再次复制操作文件。

    cp operational-file operational-file.002
    
  • 再次编辑操作文件。

  • 创建新补丁

    diff -u operational-file.002 operational-file > operational-file.patch002
    

如果您需要恢复但跳过patch.001的更改,则:

cp operational-file.001 operational-file
patch -i patch.002

这只会对原始文​​件应用第二组更改,因为日志没有重叠。

考虑使用版本控制系统来保存文件更改的记录。考虑在文件名上使用日期/时间戳而不是版本号。