Regex Bash“;“差别”;使用正则表达式忽略时将文件显示为不同的实用程序

Regex Bash“;“差别”;使用正则表达式忽略时将文件显示为不同的实用程序,regex,bash,diff,Regex,Bash,Diff,我正在尝试使用bash实用程序“diff”,这里有文档记录:。请注意,我使用的是一个windows移植版本的bash实用程序,但这不会有任何区别 我有两个文件,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

我正在尝试使用bash实用程序“diff”,这里有文档记录:。请注意,我使用的是一个windows移植版本的bash实用程序,但这不会有任何区别

我有两个文件,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

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

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

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

这应该起作用:

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

只是为了好玩,在diff中添加-b。忽略空格中的差异。

diff
不是一个“bash实用程序”。它是一个可以从bash调用的实用程序,但除此之外,它们之间没有真正的联系。