을 실행할 때 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 file2
file1에서 file2까지의 의사 sed 코드를 보여줍니다(diff file2 file1은 매우 대칭입니다).comm -123 file1 file2
file1(-1) 및 file2(-2)에 공통 줄(-3) 표시