我目前正在尝试更改一个文件的内容
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)
答案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
可以了
我想你已经想到了这一点:两个分支alpha
N 和bravo
N
diff -e alpha1.sas alpha2.sas > change12.txt
(cat change12.txt
echo w bravo2.sas
echo q ) | ed bravo.sas
这将报告对Nbravo
进行的 N 更改alpha