&引用;“差别”;工具&x27;regex的味道似乎缺乏?
我有两个文件,我一直试图与diff进行比较。这些文件是自动生成的,有许多行,看起来像:&引用;“差别”;工具&x27;regex的味道似乎缺乏?,regex,diff,Regex,Diff,我有两个文件,我一直试图与diff进行比较。这些文件是自动生成的,有许多行,看起来像: //! Generated Date : Mon, 14, Dec 2009 我希望这些差异被忽略,并且已经开始使用“-I REGEX”标志来实现这一点 然而,出现在“Date”和冒号之间的空格的数量不同,不幸的是,diff使用的正则表达式似乎缺少一些基本的正则表达式实用程序 例如,我一辈子都不能让“一个或多个”加号工作。对于空格的“\s”表示形式,处理方法相同 diff -I '.*Generate
//! Generated Date : Mon, 14, Dec 2009
我希望这些差异被忽略,并且已经开始使用“-I REGEX”标志来实现这一点
然而,出现在“Date”和冒号之间的空格的数量不同,不幸的是,diff使用的正则表达式似乎缺少一些基本的正则表达式实用程序
例如,我一辈子都不能让“一个或多个”加号工作。对于空格的“\s”表示形式,处理方法相同
diff -I '.*Generated Date\s+:.*' ....
及
两者都失败得惊人
与其继续盲目地尝试,有人能给我一个关于正则表达式的diff-specific子集的好参考吗
谢谢
======编辑=======
多亏了FalseVinylBush,我已经确定我应该摆脱“+”和任何类似的字符。这在一定程度上解决了这个问题。Diff成功匹配
.*Generated Date \+.*
及
(请注意,“日期”和“*”之间有两个空格)
但是,第二次我尝试将“:”添加到该表达式中,如下所示:
.*Generated Date \+:.*
及
这两个版本都无法匹配所讨论的字符串,并导致diff的运行时间大大增加。有什么想法吗?,diff
不支持正则表达式,也没有-I
开关
您似乎正在使用带有非标准扩展名的非标准
diff
。这些非标准扩展是如何工作的,应该在您正在使用的任何非标准diff
的文档中描述。非常有趣。。。我找不到文档参考,但通过一些实验发现:
␠*代码>和
在零或更多对您合适的情况下起作用*
- 正如你所说,
␠+代码>不起作用。
。。。但是␠{1,}
确实有效␠\{1,\}
- 更新:
␠\+代码>也有效李>
␠代码>表示未显示的空格字符)
我正在使用GNU diffutils 2.8.1中的GNU diff
man diff
和info diff
没有解释重新语法
希望这有帮助
更新:我在mangrep
中找到了一个简短的部分:
基本正则表达式与扩展正则表达式
在基本正则表达式中,元字符?、+、{、|、(、和)
失去它们的特殊意义;改为使用反斜杠版本\?,
\+,{,\\\;,\(,和\)
所以我猜它使用的是基本的正则表达式语法。好的,下面是GNU diff源代码所说的
re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING);
我认为这意味着“与gnu grep-G(基本正则表达式)相同”。根据gnu grep手册:
在基本正则表达式中,元字符?,+,{,|,(,
及)
失去它们的特殊意义;改为使用反斜杠版本
\?,\+,\{,\\\\;,\(,和\)
忘记\s、\s等。我正在使用GNU diff 2.8.1。这是非标准的?GNU diff 2.8.1是许多GNU/*操作系统(如Linux)使用的一个非常常见的版本。如果GNU工具包不能被视为标准,我不知道可以使用什么。请参阅(稀疏)在-I开关上的文档。嗯!我使用的是完全相同版本的GNU diff,所以这是一个很好的理智检查。我用正则表达式做了一些更改,你看,你是对的!问题是,它似乎在“:”上坏得很厉害。我将编辑我的原始帖子来描述这个问题。你的“:”问题:我不知道为什么,但尝试使用[:]如果你不担心误报的话,看看它是否能逃过任何特殊的影响,即使反斜杠没有,或者(b)使用。如果你不担心误报的话,在那个位置匹配任何东西…只是在黑暗中捅一刀。。。
.*Generated Date \+:.*
.*Generated Date \+\:.*
re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING);