【发布时间】:2015-10-20 02:48:46
【问题描述】:
我正在编写自动化测试来比较 HTML 文件。为了比较,我使用diff linux utility
所以,第一个 HTML 文件 1.html
<!-- just example -->
<html>
<div id="userdata_hidden">bla bla bla</div>
<div id="something else" >bla bla bla</div>
<div id="waiver_id" >bla bla bla</div>
<html>
第二个 HTML 文件2.html
<!-- just example -->
<html>
<div id="userdata_hidden">bla bla bla DIFFERENCE </div>
<div id="something else" >bla bla bla</div>
<div id="waiver_id" >bla bla bla DIFFERENCE </div>
<html>
比较文件的命令:
diff -biw 1.html 2.html
结果:
3c3
< <div id="userdata_hidden">bla bla bla</div>
---
> <div id="userdata_hidden">bla bla bla DIFFERENCE </div>
5c5
< <div id="waiver_id" >bla bla bla</div>
---
> <div id="waiver_id" >bla bla bla DIFFERENCE </div>
Comaration 工作正常,但我需要忽略包含特殊词的行的差异 - waiver_id 和 userdata_hidden。
diff 命令有-I option 用于按数字或正则表达式匹配忽略行:
忽略与 grep 样式匹配的行的插入和删除 正则表达式,使用 --ignore-matching-lines=regexp (-I regexp) 选项。您应该转义包含 shell 的正则表达式 元字符以防止外壳扩展它们。例如, 'diff -I '^[[:digit:]]'' 忽略对以 a 开头的行的所有更改 数字。
但是,-I 只忽略插入或删除的行 如果大块中的每个更改的行都包含正则表达式 - 每个 插入和每次删除——匹配正则表达式。其他 换句话说,对于每个不可忽略的变化,diff 打印完整的集合 附近的变化,包括可忽略的变化。
您可以为要忽略的行指定多个正则表达式 通过使用多个 -I 选项。 diff 尝试匹配每一行 针对每个正则表达式。
所以,我可以使用正则表达式来忽略与waiver_id 或userdata_hidden 的行的组合。如果文件没有差异,diff 不会向控制台返回任何内容(空字符串)。
问题:
如何编写正则表达式,排除包含单词 waiver_id 或 userdata_hidden 的字符串?
diff命令在使用-I选项和正则表达式时应该看起来有多正确?
附:不幸的是,这个变种不起作用:
diff -biw -I '^(?!.*(?:userdata_hidden|waiver_id))' 1.html 2.html
【问题讨论】:
-
这看起来真的像一个“做我的家庭作业”类型的问题......
-
@JérémieAstori Astori,不,我正在用 ruby 编写自动化测试。尝试使用 bash
diff命令比较两个 HTML 和 pdf 文件 -
这就是当有人只是提出解决方案而没有发布实验时的样子:-) 请包括您迄今为止尝试过的内容及其结果,而不仅仅是从头开始的答案。
-
话虽如此,如果性能不是最重要的,并且您只有 2 根针(您的 2 个字),您可以使用类似于
!str.match('waiver_id') && !str.match('userdata_hidden')的东西,避免自己的痛苦正则表达式... -
几天后回来,现在这是一个真正的问题 :) 完成后不要忘记选择正确的答案!
标签: regex linux bash ubuntu diff