Mat*_* V. 16 diff comments ignore command-line-interface
我有一个从原始项目分叉的大型代码库,我正在尝试追踪与原始项目的所有差异.许多文件编辑包括注释掉的调试代码和其他杂项注释.在Ubuntu下名为Meld的GUI差异/合并工具可以忽略注释,但只能忽略单行注释.
有没有其他方便的方法来查找非注释差异,使用GUI工具或Linux命令行工具?如果它有所不同,代码是PHP和Javascript的混合,所以我主要感兴趣忽略//
,/* */
和#
.
它的规则集和选项提供了自定义行为。
diffutils
从命令行的角度来看,您可以使用--ignore-matching-lines=RE
option for diff
,例如:
diff -d -I '^#' -I '^ #' file1 file2
Run Code Online (Sandbox Code Playgroud)
请注意,正则表达式必须匹配两个文件中的相应行,并且它匹配大块中的每个更改行才能工作,否则它仍然会显示差异。
使用单引号来保护模式免受外壳扩展并转义正则表达式保留的字符(例如括号)。
我们可以在diffutils
手册中阅读:
但是,
-I
如果大块中的每个更改行(每次插入和每次删除)都与正则表达式匹配,则仅忽略包含正则表达式的行的插入或删除。换句话说,对于每个不可忽略的更改,
diff
打印其附近的完整更改集,包括可忽略的更改。您可以使用多个-I
选项为要忽略的行指定多个正则表达式。diff
尝试将每一行与每个正则表达式匹配,从给定的最后一个开始。
armel here也很好地解释了这种行为。
也可以看看:
或者,检查其他差异应用程序,例如:
awi*_*ebe -1
尝试:
diff -I REGEXP -I REGEXP2 file1 file 2
Run Code Online (Sandbox Code Playgroud)
请参阅:维基百科的正则表达式
下面是正则表达式的示例,它们会导致 diff 忽略预处理器指令和两种标准注释块类型。
在示例中:
\#*\n
/***/
//*\n
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14425 次 |
最近记录: |