ITPub博客

首页 > 数据库 > Oracle > [20260608]使用sdiff比较修改文件.txt

[20260608]使用sdiff比较修改文件.txt

原创 Oracle 作者:lfree 时间:2026-06-08 20:52:44 0 删除 编辑

[20260608]使用sdiff比较修改文件.txt

--//有时候修改文件,想比较两者的不同之处,大部分情况下使用diff。如果改动不多,两个对比,使用sdiff相当不错,做一个记录:

$ sdiff -w 240 -s -d prx.sql prz.sql
                                                                                                           > col tpt_1 new_value _tpt_1
                                                                                                           > col tpt_2 new_value _tpt_2
SELECT NULL "1", NULL "2" FROM DUAL WHERE 1 = 2;                                                           | SELECT NULL "1", NULL "2"  , NULl tpt_1 , NULL tpt_2  FROM dual WHERE 1 = 2;
SELECT CASE WHEN INSTR (LOWER ('&2'), '2') > 0 THEN '--' ELSE '  ' END tpt_pr                              | SELECT CASE WHEN INSTR (LOWER ('&_tpt_2'), '2') > 0 THEN '--' ELSE '  ' END tpt_pr
      ,CASE WHEN INSTR (LOWER ('&2'), '2') > 0 THEN '  ' ELSE '--' END tpt_pr2                             |       ,CASE WHEN INSTR (LOWER ('&_tpt_2'), '2') > 0 THEN '  ' ELSE '--' END tpt_pr2
      ,CASE WHEN INSTR (LOWER ('&2'), 'n') > 0 THEN '--' ELSE '  ' END tpt_prnn                            |       ,CASE WHEN INSTR (LOWER ('&_tpt_2'), 'n') > 0 THEN '--' ELSE '  ' END tpt_prnn
      ,CASE WHEN INSTR (LOWER ('&2'), 'n') > 0 THEN '  ' ELSE '--' END tpt_prn                             |       ,CASE WHEN INSTR (LOWER ('&_tpt_2'), 'n') > 0 THEN '  ' ELSE '--' END tpt_prn
      ,CASE WHEN INSTR (LOWER ('&1'), ',') > 0 THEN '  ' WHEN '&1' IS NULL THEN '--' ELSE '--' END tpt_pri |       ,CASE WHEN INSTR (LOWER ('&_tpt_1'), ',') > 0 THEN '  ' WHEN '&_tpt_1' IS NULL THEN '--' ELSE '--' END tpt_pri
      ,CASE WHEN INSTR (LOWER ('&1'), ',') > 0 THEN '--' WHEN '&1' IS NULL THEN '--' ELSE '  ' END tpt_prr |       ,CASE WHEN INSTR (LOWER ('&_tpt_1'), ',') > 0 THEN '--' WHEN '&_tpt_1' IS NULL THEN '--' ELSE '  ' END tpt_prr
999999              &_tpt_prr if regexp_like(lower(l_descTbl(i).col_name), lower('&1')) then               | 999999              &_tpt_prr if regexp_like(lower(l_descTbl(i).col_name), lower('&_tpt_1')) then
999999              &_tpt_pri if  i in (&1) then                                                           | 999999              &_tpt_pri if  i in (&_tpt_1) then

--//左右对比,查看非常方便清晰。

--//简单解析:
-s, --suppress-common-lines    do not output common lines
-d, --minimal                  try hard to find a smaller set of changes
-w, --width=NUM                output at most NUM (default 130) print columns

--//顺便附上diff的比较结果:
$ diff -Nur prx.sql prz.sql
--- prx.sql     2026-04-28 16:28:04.776874339 +0800
+++ prz.sql     2026-06-01 17:13:49.973831563 +0800
@@ -21,15 +21,17 @@

 col 1 new_value 1
 col 2 new_value 2
+col tpt_1 new_value _tpt_1
+col tpt_2 new_value _tpt_2

-SELECT NULL "1", NULL "2" FROM DUAL WHERE 1 = 2;
+SELECT NULL "1", NULL "2"  , NULl tpt_1 , NULL tpt_2  FROM dual WHERE 1 = 2;

-SELECT CASE WHEN INSTR (LOWER ('&2'), '2') > 0 THEN '--' ELSE '  ' END tpt_pr
-      ,CASE WHEN INSTR (LOWER ('&2'), '2') > 0 THEN '  ' ELSE '--' END tpt_pr2
-      ,CASE WHEN INSTR (LOWER ('&2'), 'n') > 0 THEN '--' ELSE '  ' END tpt_prnn
-      ,CASE WHEN INSTR (LOWER ('&2'), 'n') > 0 THEN '  ' ELSE '--' END tpt_prn
-      ,CASE WHEN INSTR (LOWER ('&1'), ',') > 0 THEN '  ' WHEN '&1' IS NULL THEN '--' ELSE '--' END tpt_pri
-      ,CASE WHEN INSTR (LOWER ('&1'), ',') > 0 THEN '--' WHEN '&1' IS NULL THEN '--' ELSE '  ' END tpt_prr
+SELECT CASE WHEN INSTR (LOWER ('&_tpt_2'), '2') > 0 THEN '--' ELSE '  ' END tpt_pr
+      ,CASE WHEN INSTR (LOWER ('&_tpt_2'), '2') > 0 THEN '  ' ELSE '--' END tpt_pr2
+      ,CASE WHEN INSTR (LOWER ('&_tpt_2'), 'n') > 0 THEN '--' ELSE '  ' END tpt_prnn
+      ,CASE WHEN INSTR (LOWER ('&_tpt_2'), 'n') > 0 THEN '  ' ELSE '--' END tpt_prn
+      ,CASE WHEN INSTR (LOWER ('&_tpt_1'), ',') > 0 THEN '  ' WHEN '&_tpt_1' IS NULL THEN '--' ELSE '--' END tpt_pri
+      ,CASE WHEN INSTR (LOWER ('&_tpt_1'), ',') > 0 THEN '--' WHEN '&_tpt_1' IS NULL THEN '--' ELSE '  ' END tpt_prr
   FROM DUAL;
 set termout on

@@ -58,8 +60,8 @@
 999999      while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
 999999          dbms_output.put_line( '==============================' );;
 999999          for i in 1 .. l_colCnt loop
-999999              &_tpt_prr if regexp_like(lower(l_descTbl(i).col_name), lower('&1')) then
-999999              &_tpt_pri if  i in (&1) then
+999999              &_tpt_prr if regexp_like(lower(l_descTbl(i).col_name), lower('&_tpt_1')) then
+999999              &_tpt_pri if  i in (&_tpt_1) then
 999999                  dbms_sql.column_value( l_theCursor, i,l_columnValue );;
 999999                  &_tpt_prnn dbms_output.put_line ( rpad( l_descTbl(i).col_name,30 ) || ': ' || l_columnValue );;
 999999                  &_tpt_prn  dbms_output.put_line ( lpad(i,3,'0')||' '||rpad( l_descTbl(i).col_name,30 ) || ': ' || l_columnValue );;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3173307/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969347