grep 사용 파일

grep 사용 파일

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

사용하면 grep -Ff ex2.txt ex1.txt나에게 표시 a b c d되고 동일한 명령을 사용하면 -v출력이 없습니다. 첫 번째 명령도 출력되는 이유는 무엇입니까 d?

이를 수행하는 가장 쉬운 방법은 무엇입니까? grep이 이에 적합합니까? 어쩌면 diff는 각 줄을 읽고 존재 여부에 관계없이 출력할 수 있는 스크립트일 수 있을까요?

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


편집하다(OS X에서 BSD grep 사용):

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

관련 정보