我使用此 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)