![정규식과 함께 diff를 사용할 때 파일 이름을 유지하는 방법](https://linux55.com/image/202289/%EC%A0%95%EA%B7%9C%EC%8B%9D%EA%B3%BC%20%ED%95%A8%EA%BB%98%20diff%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EB%95%8C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%9C%A0%EC%A7%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
이 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)