Regular-Expression
使用帶有正則表達式的差異時如何保留文件名
我正在使用這個差異來顯示兩個文件是否不同,但我需要正則表達式來忽略我不關心的不同行。但是它的設置方式會在報告差異時更改文件的名稱。
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 不同”的內容,但我需要它作為文件名,因此如果有人不知道它與哪些文件一起執行,他們仍然可以知道哪些文件不同.
在您的 oneliner 中實際比較的差異不是文件,而是
grep
. 對於這兩個文件描述符中的每一個,它們都是由 shell(bash)動態創建的,/dev/fd/63
/dev/fd/62
它們是常用的名稱。<( command )
成語被稱為process substituion,所以沒有直接的方法diff
可以知道原始文件名,除非你明確地告訴它。考慮使用--label
or-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)