我有两个 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");
Run Code Online (Sandbox Code Playgroud)
然后我将“a”地址“xyz”更改为“xyz123”并将该数据保存在new.sql文件中。现在该new.sql文件包含如下数据:
Insert into table1 values (101 ,"a", "xyz123");
Insert into table1 values (102 ,"b", "pqr");
Run Code Online (Sandbox Code Playgroud)
当我使用这样的diff命令时:
diff old.sql new.sql
Run Code Online (Sandbox Code Playgroud)
它给出了逐行差异,但我只想要更新的数据,如 xyz123。
您可能会发现wdiff这种比较很有用;它是diff产生逐字比较的前端。使用您的示例,它默认生成
Insert into table1 values (101 ,"a", [-"xyz");-] {+"xyz123");+}
Insert into table1 values (102 ,"b", "pqr");
Run Code Online (Sandbox Code Playgroud)
它可以使用终端功能使终端上的输出更清晰(wdiff -t)。它还具有-3将输出限制为仅更改单词的选项:
======================================================================
[-"xyz");-] {+"xyz123");+}
======================================================================
Run Code Online (Sandbox Code Playgroud)
如果您还没有安装 wdiff,则需要安装它。运行sudo apt-get install wdiff或sudo dnf install wdiff或sudo yum install wdiff或适合您的操作系统的命令。
小智 5
您可以使用:
diff -u old.sql new.sql |colordiff |diff-highlight
Run Code Online (Sandbox Code Playgroud)
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 project获取它。
小智 2
根据定义,diff 逐行显示差异(请参阅 diff 手册页),因此它不会仅显示不同的字符。您可以通过预处理文件来减少差异量,例如在每个半列后插入行尾字符:
sed -e 's/;/;\'$'\n/g' old.sql > old.patched
Run Code Online (Sandbox Code Playgroud)
然后对两个结果文件使用 diff。