区分两个文件但忽略某些字符串元素的差异

时间:2018-01-23 11:08:32

标签: regex bash shell

我有两个看起来像这样的文件:

File1中

IP In    IP Out    Route    Received    Sent
1.1.1.1  2.2.2.2   1.2.1.2  2314        4324

Neighbor      Prefix         Route
127.0.0.1     127.1.1.1/24   255.255.255.0

文件2

IP In    IP Out    Route    Received    Sent
1.1.1.1  2.2.2.2   1.2.1.2  2432        6324

Neighbor      Prefix         Route
127.0.0.1     127.2.3.4/24   255.255.255.0

运行命令

diff -u file1.txt file2.txt

结果

--- file1.txt   2018-01-23 11:02:57.632280547 +0000
+++ file2.txt   2018-01-23 11:03:30.122293833 +0000
@@ -1,5 +1,5 @@
 IP In    IP Out    Route    Received    Sent
-1.1.1.1  2.2.2.2   1.2.1.2  2314        4324
+1.1.1.1  2.2.2.2   1.2.1.2  2432        6324

 Neighbor      Prefix         Route
-127.0.0.1     127.1.1.1/24   255.255.255.0
+127.0.0.1     127.2.3.4/24   255.255.255.0

我想输出一个仅列出前缀列中差异的文件,并忽略Received / Sent列中的任何差异。我曾想过使用正则表达式

\w{2,4}\b

使用-I参数捕获长度在2到4个字符之间的叮当以忽略这些行,但它似乎不起作用。

所以我想要的最终输出是:

Neighbor      Prefix         Route
-127.0.0.1     127.1.1.1/24   255.255.255.0
+127.0.0.1     127.2.3.4/24   255.255.255.0

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

以下是一些可能正常运行的代码......无论如何,它会根据您的示例输入完成您在设置中所要求的内容。

diff  -I '\(\([0-9]*\.\)\{3\}[0-9]* *\)\{3\}' -U 1 f1 f2

有趣的是,当我使用-u(相当于-U 3)时,忽略的差异显示为上下文的一部分。

由于所有的转义,正则表达式看起来有点不愉快,但它所做的只是忽略连续3行ip地址的行,并且它们之间有空格。