使用通配符匹配文件

时间:2014-11-23 03:22:20

标签: regex unix diff

我有一个脚本可以测试我正在设计的一些API。此脚本获取程序的输出,并将其与预期输出(主文件)进行比较。如果匹配,则不返回任何错误。我希望能够屏蔽日期,内存地址等内容。

以下是一个例子:

==== MASTER file ====
TEST STARTED ON .*
ADDING ELEMENT 5 to HASHTABLE. Location 0x.*
LOOKING UP ELEMENT 5. SUCCESFUL.
REMOVING ELEMENT
==== END ====

一个与之匹配的文件:

==== OUTPUT file ====
TEST STARTED ON NOV/23 12:18
ADDING ELEMENT 5 to HASHTABLE. Location 0x51F56E2
ROOKING UP ELEMENT 5. SUCCESFUL.
REMOVING ELEMENT
==== END ====

有没有办法让diff使用这些通配符?或者还有其他程序可以做到吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

你不能用简单的差异做到这一点。你可以这样做:

set -f
while IFS=, read pattern match ; do
  grep "$pattern" >/dev/null <<<"$match" || { echo ERROR ; exit 1 ; }
done < <(paste -d, master output)

假设master是主文件,output是输出文件。

要记住几件重要的事情:

  1. 主文件应包含正则表达式,因此所有行都应以^开头。
  2. set -f是禁用shell扩展所必需的,否则可能会产生意想不到的后果。
  3. Regexp应该被正确转义,因为它们是通过变量替换来调用的,因此需要双引号。
  4. 必须将
  5. $IFS设置为既不在主文件中也不在输出文件中使用的字符。相应地设置paste&#39; -d参数。