file1을 file2의 패턴으로 사용하고 그 반대의 경우 grep이 다른 결과를 표시하는 이유는 무엇입니까?

file1을 file2의 패턴으로 사용하고 그 반대의 경우 grep이 다른 결과를 표시하는 이유는 무엇입니까?

을 실행할 때 grep -m 1 -Fnxvf file1 file2일부 파일의 경우 실행할 때와 다른 줄 번호가 표시됩니다 grep -m 1 -Fnxvf file2 file1(파일 교환).

왜?


파일을 최소한의 예로 축소했습니다.

파일 1

Pp: 1        Id pezzo 193        posIn = { x = 132, y = 1432 }
Pp: 1        Id pezzo 193        posIn = { x = 136, y = 1432 }
Pp: 1        Id pezzo 193        posIn = { x = 84, y = 1436 }
Pp: 1        Id pezzo 193        posIn = { x = 88, y = 1436 }

파일 2

Pp: 1        Id pezzo 193        posIn = { x = 132, y = 1432 }
Pp: 1        Id pezzo 193        posIn = { x = 84, y = 1436 }
Pp: 1        Id pezzo 193        posIn = { x = 88, y = 1436 }
Pp: 1        Id pezzo 193        posIn = { x = 92, y = 1436 }

내가 얻은 결과는 다음과 같습니다.

$ grep -m 1 -Fnaxvf file2 file1
2:Pp: 1      Id pezzo 193        posIn = { x = 136, y = 1432 }
$ grep -m 1 -Fnaxvf file1 file2
4:Pp: 1      Id pezzo 193        posIn = { x = 92, y = 1436 }

첫 번째 결과는 내가 예상한 것과 정확히 일치하지만 두 번째 경우에는 (일반적으로 그렇습니다) file2.


긴 설명

두 파일 간의 첫 번째 차이점을 찾고 표시하려고 합니다. 보여주고 싶다오직첫 번째 차이점과 그 차이가 발생하는 위치입니다.

찾았어요이것SO 응답(답변에 대한 내 의견 참조)은 작동하는 것 같지만 일부 파일의 경우 위에 표시된 이상한 동작을 발견했습니다.

답변1

TLDR: grep이 패턴을 순서대로 사용한다고 보장할 수는 없습니다.

다음 내용을 포함하는 두 개의 파일이 있다고 가정해 보겠습니다(한 줄에 한 글자씩, 가독성을 위해 접었습니다).

파일 1

A B D E

그리고

파일 2

A B C D
  • 파일 1의 그룹 2(ABCD)에서 첫 번째로 제외된( -v 를 사용했기 때문에) 문자는 E입니다.
  • 파일 2의 세트 1에서 제외된 첫 번째 문자는 C입니다.

파일 비교는 일반적으로 다음과 같습니다.

  • cmp file1 file2바이너리 파일의 경우 diff에 신경 쓰지 않는 경우(cmp -s(자동)를 사용할 수도 있습니다)
  • diff file1 file2file1에서 file2까지의 의사 sed 코드를 보여줍니다(diff file2 file1은 매우 대칭입니다).
  • comm -123 file1 file2file1(-1) 및 file2(-2)에 공통 줄(-3) 표시

관련 정보