我有两个看起来像这样的文件:
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
有更好的方法吗?
答案 0 :(得分:0)
以下是一些可能正常运行的代码......无论如何,它会根据您的示例输入完成您在设置中所要求的内容。
diff -I '\(\([0-9]*\.\)\{3\}[0-9]* *\)\{3\}' -U 1 f1 f2
有趣的是,当我使用-u
(相当于-U 3
)时,忽略的差异显示为上下文的一部分。
由于所有的转义,正则表达式看起来有点不愉快,但它所做的只是忽略连续3行ip地址的行,并且它们之间有空格。