编辑

编辑

我目前正在尝试更改一个文件的内容

orig.sas 

匹配更新文件的内容

new.sas

用 new.sas 替换 orig.sas 会进行一些更改,但 orig.sas 中引用了许多我不想更改的目录。

提交以下代码会输出一个脚本“changes.txt”,其中包含需要在 orig.sas 中更改的所有行,以使其与 new.sas 相同

diff -e orig.sas new.sas > changes.txt

changes.txt 看起来像这样(完整输出还有更多行):

3668c
label DBMS=xlsx replace;
.
3649,3665d
3643d

从这里我删除了引用目录中更改的所有行,因此只有代码主体受到影响。

我认为我应该能够使用以下内容将此脚本提交到 sed (目的是使所有更改更改为changes.txt):

sed - orig.sas < changes.txt

但我不想直接覆盖 orig.sas,而是更喜欢输出到版本 2 文件(例如 orig_v2.sas)

我的进步来自于https://www.computerhope.com/unix/udiff.htm

答案1

diff -e的结果应该被馈送到(修改)到ed.

尝试

diff -e orig.sas new.sas > changes.txt
echo wq >> changes.txt

ed orig.sas < changes.txt

在哪里

  • wq将要w仪式和quit, 打印写入的字符数
  • 可选的--silent不会输出超过计数。

请参阅man ed获取更多信息。

编辑

我看不到将 diff 应用于原始文件的差异点,在我看来就cp new.sas orig_v2.sas可以了

我想你已经想到了这一点:两个分支alphaN 和bravoN

diff -e alpha1.sas alpha2.sas > change12.txt

(cat change12.txt
 echo w bravo2.sas
 echo q ) | ed bravo.sas

这将报告对Nbravo进行的 N 更改alpha

相关内容