我有两个 SQL 文件,一个old.sql
是new.sql
.
假设old.sql
包含一个包含三个字段的表,Emp_Id、Name 和 Address,数据存储在 old.sql 中,如下所示:
Insert into table1 values (101 ,"a", "xyz");
Insert into table1 values (102 ,"b", "pqr");
然后我将“a”地址“xyz”更改为“xyz123”并将该数据保存在文件中new.sql
。现在该new.sql
文件包含如下数据:
Insert into table1 values (101 ,"a", "xyz123");
Insert into table1 values (102 ,"b", "pqr");
当我使用diff
这样的命令时:
diff old.sql new.sql
它给出了逐行差异,但我只想要更新的数据,例如 xyz123。
答案1
答案2
你可能会发现wdiff
对于这种类型的比较很有用;它是一个diff
产生逐字比较的前端。根据您的示例,它默认生成
Insert into table1 values (101 ,"a", [-"xyz");-] {+"xyz123");+}
Insert into table1 values (102 ,"b", "pqr");
它可以使用终端功能使终端上的输出更清晰 ( wdiff -t
)。它还有一个-3
选项,将输出限制为仅更改的单词:
======================================================================
[-"xyz");-] {+"xyz123");+}
======================================================================
如果您尚未安装 wdiff,则需要安装它。运行sudo apt-get install wdiff
或sudo dnf install wdiff
或sudo yum install wdiff
或 适合您的操作系统的命令。
答案3
您可以使用:
diff -u old.sql new.sql |colordiff |diff-highlight
colordiff 是一个 Ubuntu 软件包。您可以使用安装它sudo apt-get install colordiff
。
diff-hight
来自 git (自版本 2.9 起)。它位于/usr/share/doc/git/contrib/diff-highlight/diff-highlight
。你可以把它放在你的某个地方$PATH
。或者从diff-so-fancy 项目。
答案4
我也写了我的自己的脚本使用以下方法解决这个问题最长公共子序列算法。
它是这样执行的
JLDiff.py a.txt b.txt out.html
结果是带有红色和绿色的 html。较大的文件确实需要更长的时间来处理,但这会进行真正的逐字符比较,而无需首先逐行检查。
此答案交叉发布自这里。
我发现 JLDiff 在 pypy 下运行速度要快得多。