使用正则表达式忽略时,Bash“diff”实用程序将文件显示为不同

时间:2011-09-22 19:17:03

标签: regex bash diff

我正在尝试使用此处记录的bash实用程序“diff”:http://ss64.com/bash/diff.html。请注意,我使用的是bash实用程序的Windows端口版本,但这不应该有任何区别。

我有两个文件,regex_test_1.txt和regex_test_2.txt,其中包含以下内容:

regex_test_1.txt:

// $Id: some random id string $ more text

text that matches

regex_test_2.txt:

// $Id: some more random id string $ more text

text that matches

我正在尝试区分这些文件,同时忽略任何适合此正则表达式的行:

.*\$(Id|Header|Date|DateTime|Change|File|Revision|Author):.*\$.*

但是,当我运行diff并告诉它使用-I参数忽略与此正则表达式匹配的行时,这是输出:

C:\Users\myname\Documents>diff -q -r -I ".*\$(Id|Header|Date|DateTime|Change|File|Revision|Author):.*\$.*" regex_test_1.txt regex_test_2.txt
Files regex_test_1.txt and regex_test_2.txt differ

我希望它不会发现任何差异(并且不报告任何内容)。为什么发现这些文件不同?

2 个答案:

答案 0 :(得分:4)

这是因为diff使用基本的正则表达式语法,其中某些正则表达式元字符失去了它们的特殊含义:

  

在基本正则表达式中,元字符?, +, {, |, (, and )失去了它们的特殊含义;而是使用反斜杠版本\?, \+, \{, \|, \(, and \)

这应该有效:

.*\$\(Id\|Header\|Date\|DateTime\|Change\|File\|Revision\|Author\):.*\$.*

答案 1 :(得分:0)

只是为了咯咯笑,将-b添加到你的差异中。忽略空白区别。