diff를 사용하여 파일을 비교할 때 텍스트를 제외한 모든 것을 무시하시겠습니까?

diff를 사용하여 파일을 비교할 때 텍스트를 제외한 모든 것을 무시하시겠습니까?

파일 비교 명령의 경우 diff텍스트 전용 파일 비교에 필요한 옵션은 무엇입니까?

내 말은 모든 공백, 탭, 개행 문자 등을 무시하고 싶다는 뜻입니다.

다양한 옵션을 시도했지만 원하는 결과를 얻지 못했습니다.

답변1

파일을 전처리한 다음 스트림을 비교할 수 있습니다. 예를 들어 tr모든 공백과 줄 바꿈을 제거합니다.

diff <( tr -d ' \n' <file1 ) <( tr -d ' \n' <file2)

예제 파일은 a및 이며, b텍스트는 공유하지만 공백과 개행 위치는 공유하지 않습니다.

cat a
1
2
3

cat b
1 2 3

diff -sq a b
Files a and b differ

diff -sq <( tr -d ' \n' <a ) <( tr -d ' \n' <b )
Files /dev/fd/63 and /dev/fd/62 are identical

알아채다

  1. these words사이에는 차이가 없습니다.th esew ord s
  2. 제거하려는 문자에 특별한 주의를 기울여야 합니다.
  3. diff출력 파일 이름은 파일 이름이 아닌 스트림 이름입니다.

man tr탭 등과 같은 특수 문자를 봅니다 . (어쩌면 이 [:space:]세트가 귀하의 요구에 가장 적합할 수도 있습니다)

답변2

-w모든 공백(탭, 공백:) 과 공백 개행( ) 을 무시하려면 다음을 수행 -B하십시오(GNU diff 가정).

$ diff -B -w file1 file2

또는 긴 옵션( 참조 man diff) 을 사용하여

$ diff --ignore-blank-lines --ignore-all-space file1 file2

이는 본질적으로 전처리된 파일과 동일합니다(그러나 더 설명적인 출력이 있음). 예 tr:

$ diff <(tr -d '[:space:]' < file1)  <(tr -d '[:space:]' < file2)

관련 정보