파일을 사용하여 grep

파일을 사용하여 grep

파일이 2개 있는데 차이점을 찾아 ex2에 없는 파일만 출력하고 싶습니다.

을 사용하면 출력이 없는 동일한 명령을 사용하면 grep -Ff ex2.txt ex1.txt표시됩니다 . 왜 첫 번째 명령도 출력됩니까 ?a b c d-vd

이를 수행하는 가장 쉬운 방법은 무엇입니까? grep이 이에 적합합니까? 어쩌면 각 줄을 읽고 그 줄이 있는지 없는지 출력하는 스크립트를 비교할 수 있을까요?

cat ex1.txt
a
b
c
d

cat ex2.txt
a
b
c

편집---내 출력은 다음과 같이 표시됩니다.

cat ex2.txt
a
b
c

cat ex1.txt
a
b
c
d

grep -vf ex2.txt ex1.txt

grep -f ex2.txt ex1.txt
a
b
c
d

답변1

grep실제로 여기 작업에 적합한 도구는 아니지만 grep manpage도움이 될 만한 도구를 간단히 살펴보십시오. grep일부는 기본적으로 GNU를 사용하고 다른 일부는 다른 것을 사용할 수 있으므로 배포판마다 약간씩 다를 수 있습니다.

  • -F ... 고정 문자열(개행 문자로 구분) - (범주: 일치자 선택)
  • -f ... 파일 이름(범주: 일치 제어)
  • -v ... 일치 반전(범주: 일치 제어)

따라서 다음과 같은 것이 grep -Fvf ex2.txt ex1.txt작동할 것이라고 상상할 수도 있습니다. 하지만,이것은 좋은 해결책이 아니다, 시작하기 전에 파일에 대해 이미 알고 있어야 하기 때문입니다. diff파일 및/또는 디렉터리 간의 보다 구체적이고 정확한 차이점을 제공하는 더 나은 도구(예: 변형)가 있습니다 .

편집: Fire 문자열이 아닌 고정 문자열(자동 손상됨)

답변2

파일 순서를 변경해 보세요.

grep -v -f ex2.txt ex1.txt
> d

답변3

오류를 재현할 수 없습니다:

cat ex2.txt 
a
b
c

cat ex1.txt 
a
b
c
d

grep -vf ex2.txt ex1.txt 
d

grep -f ex2.txt ex1.txt 
a
b
c

grep -Ff ex2.txt ex1.txt 
a
b
c

grep -vFf ex2.txt ex1.txt 
d

grep -V
grep (GNU grep) 2.20

lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.5 (jessie)
Release:    8.5
Codename:   jessie


편집하다(BSD grep을 사용하는 OS X):

cat ex2.txt 
a
b
c

cat ex1.txt 
a
b
c
d

grep -f ex2.txt ex1.txt 
a
b
c

grep -vf ex2.txt ex1.txt 
d

grep -Ff ex2.txt ex1.txt 
a
b
c

grep -v -Ff ex2.txt ex1.txt 
d

grep -V
grep (BSD grep) 2.5.1-FreeBSD

관련 정보