我正在编写自动化测试来比较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>
Сommand比较文件:
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的正则表达式 元字符,以防止shell扩展它们。例如, 'diff -I'^ [[:digit:]]''忽略对以a开头的行的所有更改 数字。
但是, - 我只忽略插入或删除的行 如果hunk-every中的每个更改行都包含正则表达式 插入和每次删除 - 匹配正则表达式。其他 单词,对于每个不可忽略的变化,diff打印完整的一组 附近的变化,包括可忽略的变化。
您可以为要忽略的行指定多个正则表达式 通过使用多个-I选项。 diff尝试匹配每一行 反对每个正则表达式。
因此,我可以使用正则表达式忽略与waiver_id
或userdata_hidden
的行的联合。如果文件没有差异diff
则不向控制台返回任何内容(空字符串)。
问题:
如何编写正则表达式,排除包含单词waiver_id或userdata_hidden的字符串?
使用diff
选项和正则表达式查看-I
命令的正确程度如何?
P.S。不幸的是,这个变种不起作用:
diff -biw -I '^(?!.*(?:userdata_hidden|waiver_id))' 1.html 2.html
答案 0 :(得分:1)
我需要检查该字符串是否包含单词
waiver_id
和userdata_hidden
。
^(?!.*\bwaiver_id\b)(?!.*\buserdata_hidden\b)
如果您不希望显示任何一个字符串。
^(?!.*\b(?:userdata_hidden|waiver_id)\b)