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

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

grepegrep, , 및 사이의 기술적 차이점을 알려주실 수 있는 사람이 있습니까 fgrep? 적절한 예를 제공할 수 있습니까?

grep언제 over를 사용해야 하며 egrep그 반대의 경우도 마찬가지입니까?

답변1

역사적으로 이러한 스위치는 별도의 바이너리로 제공되었습니다. 일부 매우 오래된 Unix 시스템에서는 별도의 바이너리를 호출해야 하지만 모든 최신 시스템에서는 스위치를 선호합니다. grep 매뉴얼 페이지에 이에 대한 자세한 내용이 있습니다.

그들이 하는 일에 대해서는 -Egrep을 특수 모드로 전환하여 표현식이 일반 패턴 일치 대신 ERE(확장 정규 표현식)로 평가되도록 합니다. 이 구문에 대한 자세한 내용은 매뉴얼 페이지에 있습니다.

-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
    

답변2

에서 man grep:

egrep은 grep -E와 동일합니다.
 fgrep은 grep -F와 동일합니다. egrep으로 직접 전화하거나  
  fgrep은 더 이상 사용되지 않지만 기록 애플리케이션을 허용하기 위해 제공됩니다.
  수정되지 않은 상태로 실행될 수 있습니다.

당신이 사용하거나 fgrep당신 grep -F아니요grep 문자열이 패턴으로 해석되기를 바랍니다.

확장 정규식을 사용해야 하는 경우 egrep또는를 사용할 수 있습니다.grep -E

답변3

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.)

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

답변4

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

egrep과 grep의 차이점에 관해서는 egrep이 대부분의 경우 원하는 것이라고 생각합니다. GNU 매뉴얼 사이트구문에 있는 것처럼 보이는 grep과 egrep의 차이점을 나열합니다. 어떤 것에는 슬래시가 필요하지만 다른 것에는 그렇지 않습니다. 나는 egrep이 perl 정규식 및 javascript 정규식과 더 "호환"되므로 egrep을 사용하는 것이 더 쉽다고 생각합니다.

그런데. 나는 당신이 기부하도록 정말로 격려합니다확인하다한 번 시도해 보세요. PREG를 지원하고 더 유용한 기본값이 있습니다(예: 색상 지정, 원하는 것이 아닐 수 있는 디렉터리 건너뛰기(예: .svn), 심볼릭 링크를 따라가는 기능, ack 입력이 grep -E 보다 조금 더 쉽습니다). .

관련 정보