我有两个文件
档案1
INFO : temp0 Directory
created
INFO : temp0 Directory created
file2的
INFO : reuse temp1
因此,在区分这两个文件时,我想忽略以Directory created
结尾的语句。
我写了
diff -I 'Directory created' file1 file2
因此,此语句成功忽略了file1的第二行,但它没有忽略在单独行中包含Directory created
的第一行。
所以,如果有人知道解决方案,请帮助我!
答案 0 :(得分:0)
基本上 - 如果差异中的所有行匹配,我将仅匹配 。在您描述的情况下 - 条件不成立。
diff -I "INFO" 1 2 | grep -v "Directory created"
可能适合您,但它不能正确计算差异块边界
希望有所帮助
答案 1 :(得分:0)
嗯,我认为最简单的解决方案是从第一个文件中过滤掉这些行。例如,您可以使用以下awk脚本执行此操作:
# if line contains 'Directory created', just skip it.
/Directory created/ {
had_dir = ""
next
}
# if line contains sole 'Directory', store it and lookup next line.
/Directory/ {
had_dir = $0
next
}
# if line contains sole 'created' and we stored a line (which means
# it contained 'Directory'), then delete the stored one and skip
# (effectively, skip both).
/created/ && had_dir {
had_dir = ""
next
}
# otherwise, if we stored a line, print it.
had_dir {
print had_dir
had_dir = ""
}
# and print the current line.
{
print
}
如果您的输入更复杂,您可能需要稍微调整一下正则数据。
然后,使用脚本过滤掉第一个文件:
$ awk -f script.awk file1 | diff - file2
0a1
> INFO : reuse temp1
请注意,您将-
作为第一个参数传递给diff
,以使其读取awk
的管道输出而不是文件。
同时请注意,线偏移将不再正确。