将 diff 与正则表达式一起使用时如何保留文件名

将 diff 与正则表达式一起使用时如何保留文件名

我使用此 diff 来显示两个文件是否不同,但我需要正则表达式来忽略我不关心的不同行。但它的设置方式会在报告差异时更改文件名称。

diff -q --suppress-common-lines -B <(grep -vE '\s(name|timestamp|root)=' goldcopy.xml)  <(grep -vE '(\sname|timestamp|root)=' QJ03425234.xml)

它报告类似“文件 /dev/fd/63 和 /dev/fd/62 不同”的内容,但我需要它是文件名,这样如果有人不知道它运行的文件是什么,他们仍然可以知道哪些文件不同。

答案1

在你的 oneliner 中, diff 实际上比较的不是文件,而是grep.对于这两个文件描述符中的每一个,它们都是由 shell (bash) 动态创建的,/dev/fd/63 /dev/fd/62它们是常用名称。<( command )成语被称为流程替代,所以没有直接的方法可以diff知道原始文件名,除非你明确地告诉它。考虑使用--label-L选项

F1=goldcopy.xml; F2=QJ03425234.xml;  diff  -L $F1  -q --suppress-common-lines -B <(grep -vE '\s(name|timestamp|root)=' $F1)  -L $F2 <(grep -vE '(\sname|timestamp|root)=' $F2) 

相关内容