it-swarm.dev

`grep`,`egrep` 및`fgrep`의 차이점은 무엇입니까?

누구든지 grep, egrepfgrep의 기술적 차이점을 알려주고 적절한 예를 제공 할 수 있습니까?

grep 대신 egrep을 사용해야하는 경우와 그 반대의 경우는 언제입니까?

287
mr_eclair
  • egrepgrep -E 와 100 % 동일합니다.
  • fgrepgrep -F 와 100 % 동일합니다.

역사적으로 이러한 스위치는 별도의 바이너리로 제공되었습니다. 정말 오래된 유닉스 시스템에서는 별도의 바이너리를 호출해야하지만 모든 최신 시스템에서는 스위치가 선호됩니다. grep 매뉴얼 페이지에 이에 대한 세부 사항이 있습니다.

-E는 grep을 특수 모드로 전환하여 표현식이 일반적인 패턴 일치와 달리 ERE (Extended Regular Expression)로 평가되도록합니다. 이 구문에 대한 자세한 내용은 매뉴얼 페이지에 있습니다.

-E, --extended-regexp
PATTERN을 확장 정규식으로 해석

-F 스위치는 grep을 다른 모드로 전환하여 일치하는 패턴을 허용하지만 해당 패턴을 한 줄에 하나의 검색 문자열로 분할하고 OR 검색을 수행합니다. 특별한 패턴 일치를 수행하지 않고 문자열의.

-F, --fixed-strings
PATTERN을 줄 바꿈으로 구분 된 고정 문자열 목록으로 해석합니다.

시나리오 예는 다음과 같습니다.

  • 10 개의 Unix 사용자 이름 목록이 일반 텍스트로 된 파일이 있습니다. 머신에서 그룹 파일을 검색하여 나열된 10 명의 사용자 중 하나가 특수 그룹에 있는지 확인하려고합니다.

    grep -F -f user_list.txt /etc/group
    

    -F 스위치가 도움이되는 이유는 패턴 파일의 사용자 이름이 일반 텍스트 문자열로 해석되기 때문입니다. 예를 들어 점은 와일드 카드가 아닌 점으로 해석됩니다.

  • 멋진 표현을 사용하여 검색하고 싶습니다. 예를 들어 괄호 ()는 OR 연산자로 사용되는 |로 그룹을 나타내는 데 사용할 수 있습니다. -E를 사용하여이 검색을 실행할 수 있습니다.

    grep -E '^no(fork|group)' /etc/group
    

    "nofork"또는 "nogroup"으로 시작하는 행을 반환합니다. -E 스위치가 없으면 일반적인 패턴 일치를 사용하면 정확한 패턴 만 검색하므로 관련된 특수 문자를 이스케이프해야합니다.

    grep '^no\(fork\|group\)' /etc/group
    
304
Caleb

man grep에서 :

 egrep은 grep -E와 같습니다. 
 fgrep는 grep -F와 같습니다. egrep 또는 
 fgrep로서의 직접 호출은 더 이상 사용되지 않지만이 응용 프로그램에 의존하는 기록 응용 프로그램 
이 수정되지 않은 상태로 실행될 수 있도록 제공됩니다. 

do n't 잘린 문자열을 패턴으로 해석하려면 fgrep 또는 grep -F를 사용하십시오.

확장 정규식을 사용해야하는 경우 egrep 또는 grep -E를 사용하십시오.

33
rozcietrzewiacz

egrepfgrep는 기본적으로 grep -Egrep -F (각각) :

   -E, --extended-regexp
          Interpret PATTERN as an extended regular  expression  (ERE,  see
          below).  (-E is specified by POSIX.)

   -F, --fixed-strings
          Interpret  PATTERN  as  a  list  of  fixed strings, separated by
          newlines, any of which is to be matched.  (-F  is  specified  by
          POSIX.)

오류 메시지는 다를 수 있습니다.

15

"남자 grep"에서 :

3 가지 변종 프로그램 (예 : rep, fgrep 및 rgrep)을 사용할 수 있습니다. egrep는 grep -E와 동일합니다. fgrep는 grep -F와 동일합니다. rgrep는 grep -r과 동일합니다. egrep 또는 fgrep와 같은 직접 호출은 더 이상 사용되지 않지만이를 사용하는 히스토리 애플리케이션은 수정되지 않은 상태로 실행할 수 있습니다.

8
Rufo El Magufo

완전 문자열을 검색하고 전달한 문자열이 완전하게 해석되도록하려면 (즉, 점 또는 물음표가 다른 것으로 해석 될 위험이없는 경우) fgrep 또는 egrep -F를 사용하십시오.

Egrep과 grep의 차이점은 egrep이 대부분 원하는 것입니다. The GNU manual site 구문에있는 것으로 보이는 grep과 egrep의 차이점을 나열합니다 : 어떤 것들은 슬래시가 필요하지만 다른 것들은 필요하지 않습니다. Perl regexp 및 javascript regexp와 "호환"되므로 egrep을 사용하는 것이 더 쉽습니다.

Btw. ack 시도해보십시오-PREG를 지원하고 더 유용한 기본값이 있습니다 (예 : 채색, .svn과 같은 원하지 않는 디렉토리를 건너 뛰고 심볼릭 링크를 따라갈 수있는 기능, grep -E보다 ack를 입력하는 것이 조금 더 쉽습니다.

3
qbolec