Regular-Expression

使用帶有正則表達式的差異時如何保留文件名

  • February 11, 2022

我正在使用這個差異來顯示兩個文件是否不同,但我需要正則表達式來忽略我不關心的不同行。但是它的設置方式會在報告差異時更改文件的名稱。

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可以知道原始文件名,除非你明確地告訴它。考慮使用--labelor-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) 

引用自:https://unix.stackexchange.com/questions/690239