패턴 파일을 사용하는 역 grep은 일치하지 않는 항목을 표시하지 않습니다.

패턴 파일을 사용하는 역 grep은 일치하지 않는 항목을 표시하지 않습니다.

거의 동일한 두 개의 파일이 있습니다."foo"와 "bar".

각 파일에는 수천 개의 줄이 있으며 각 줄에는 하나의 번호가 있습니다.

I sortdiff두 파일이 모두 있는 경우 결과는 다음과 같습니다.

$ 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,선이 나타나는 순서가 중요합니다. 또한 -xgrep 명령에는 옵션이 포함되어 있지 않기 때문에 단순한 줄부분 일치출력에서 제외됩니다.

재현 가능한 예

다음 두 파일을 고려하십시오.

$ 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출력을 더 쉽게 이해할 수 있도록 더 많은 컨텍스트를 생성합니다.

관련 정보