거의 동일한 두 개의 파일이 있습니다."foo"와 "bar".
각 파일에는 수천 개의 줄이 있으며 각 줄에는 하나의 번호가 있습니다.
I sort
와 diff
두 파일이 모두 있는 경우 결과는 다음과 같습니다.
$ diff foo bar
5984a5985,5986
> 15676
> 15677
7703,7706d7704
< 17486
< 17487
< 17488
< 17489
그러나 grep -Fvf
두 파일을 모두 사용하는 경우 양방향에서 "일치하지 않는 항목"이 전혀 없습니다.
$ grep -Fvf foo bar
$ grep -Fvf bar foo
$
왜 그런 겁니까? diff와 비슷한 결과를 얻어야 하지 않나요? 첫 번째 명령은 diff 값의 "전반"을 반환하고 두 번째 grep 명령은 나머지 값을 반환할 것으로 예상합니다.
예상한 결과를 얻지 못하는 이유는 무엇입니까?
답변1
의 diff
경우와 달리 grep -Fvf
,선이 나타나는 순서가 중요합니다. 또한 -x
grep 명령에는 옵션이 포함되어 있지 않기 때문에 단순한 줄부분 일치출력에서 제외됩니다.
재현 가능한 예
다음 두 파일을 고려하십시오.
$ cat foo
156
174
15676
17486
17487
$ cat bar
15677
15678
156
174
15676
명령 은 명령이 출력을 생성하지 않는 diff
동안 서로 다르다는 것을 보여줍니다 grep
.
$ diff foo bar
0a1,2
> 15677
> 15678
4,5d5
< 17486
< 17487
$ grep -Fvf foo bar; grep -Fvf bar foo
-x
전체 라인 일치를 요구하도록 추가하면 grep은 다음을 생성합니다.
$ grep -Fvxf foo bar
15677
15678
$ grep -Fvxf bar foo
17486
17487
추가 제안
처럼축복하다주석에서 제안하면 diff -u
출력을 더 쉽게 이해할 수 있도록 더 많은 컨텍스트를 생성합니다.