정규식과 함께 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셸(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) 

관련 정보