我有两个文件,我一直在尝试与diff进行比较.这些文件是自动生成的,并且包含许多行,如下所示:
//!   Generated Date  : Mon, 14, Dec 2009
我希望忽略这些差异,并且已经开始使用"-I REGEX"标志来实现这一点.
但是,"Date"和冒号之间出现的空格数量各不相同,不幸的是,diff使用的正则表达式的味道似乎缺少一些基本的正则表达式实用程序.
例如,我不能为我的生活获得"一个或多个"加号工作.同样处理空格的"\ s"表示.
diff -I '.*Generated Date\s+:.*' ....
和
diff -I '.*Generated Date +:.*' ....
两者都失败了.
不是继续盲目地尝试,有人可以指出我对正则表达式的diff特定子集的一个很好的参考吗?
谢谢!
=====编辑=======
感谢FalseVinylShrub,我已经确定我应该逃避我的'+'和任何类似的角色.这有点解决了这个问题.差异成功匹配
.*Generated Date \+.*
和
.*Generated Date  *.*
(请注意,"Date"和"*"之间有两个空格.)
然而,第二个我尝试将':'添加到该表达式,如下所示:
.*Generated Date \+:.*
和
.*Generated Date \+\:.*
两个版本都无法匹配有问题的字符串,导致diff需要花费更多的时间来运行.有什么想法?
Fal*_*rub 10
非常有趣......我找不到文档参考,但是一些实验发现:
?*和.*工作,如果为零或更多的是给你OK?+不起作用.也没有?{1,}...但?\{1,\} 确实有效?\+也有效!(?表示没有出现的空格字符).
我正在使用GNU diffutils 2.8.1中的GNU diff.
man diff并info diff没有解释RE语法.
希望这可以帮助.
更新:我发现了一个简短的部分man grep:
基本与扩展正则表达式
在基本的正则表达式中,元字符?,+,{,|,(和)失去了它们的特殊含义; 而是使用反斜杠版本\?,\ +,\ {,\ |,\(和\).
所以我猜它正在使用Basic正则表达式语法.
好的,这是GNU差异源所说的.
re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING);
我认为这意味着"与gnu grep -G相同"(基本正则表达式).根据gnu grep手册页:
在基本的正则表达式中,元字符?,+,{,|,(和)失去了它们的特殊含义; 而是使用反斜杠版本\?,\ +,\ {,\ |,\(和\).
忘记\ s,\ S等