누구나 grep, egrepfgrep 및 적절한 예를 제공합니까?

iv id =보다 grep를 사용해야하는 경우 “ce05f2f12e”>

또는 그 반대입니까?

댓글

Answer

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

그들이하는 일과 관련하여 -E는 grep을 특수 모드로 전환하여 표현식이 정상이 아닌 ERE (확장 정규 표현식)로 평가되도록합니다. 패턴 매칭. 이 구문에 대한 자세한 내용은 man 페이지에 있습니다.

-E, --extended-regexp
PATTERN을 확장 된 일반으로 해석 expression

-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 

댓글

  • 일부 시스템에는 '에

또는 fgrep; -E-F가 표준입니다. egrep에는 실제로 약간의 비 호환성이 있습니다. {를 약간 다르게 취급합니다.

  • fgrep는 Aho-Corasick 백엔드를 사용하는 반면 grep는 수정 된 버전의 Commentz-Walter를 사용합니다. 즉, grep는 최악의 경우 O (mn) 복잡성을 갖는 반면 fgrep는 최악의 O (m + n)입니다.
  • Gilles " au contraire mon capitan ", 일부 시스템 (오래된 경우)에는 표준 grep에 대한 -F 옵션이 없을 수 있지만 fgrep이 있고, 일부 ppl은 특수 문자에 grep을 사용하는 것에 대해 발견 한 원래 스레드에서 불만을 제기합니다.
  • 최근에 egrepgrep -E는 다른 실행 파일 인 BusyBox 및 BSD grep에 의해 처리되었습니다. 두 변형은 \s와 같은 비 Posix 정규식 구문에 대한 동작 차이가 있습니다. 이로 인해 많은 혼란이 생겼습니다 …
  • 답변

    From man grep :

     egrep is the same as grep -E. fgrep is the same as grep -F. Direct invocation as either egrep or fgrep is deprecated, but is provided to allow historical applications that rely on them to run unmodified. 

    다음의 경우 fgrep 또는 grep -F를 사용합니다. grepped 문자열이 패턴으로 해석되는 것을 원하지 않습니다 .

    egrep 또는 확장 정규식을 사용해야하는 경우.

    답변

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

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

    댓글

    • 좋아,하지만 확장 정규식은 무엇입니까 ? ' 아래에서 실제로 설명하지 않습니다. 몇 가지 예가 좋을 것입니다 …
    • @isomorphismes :이 위키 북 링크 는 잘 설명합니다 …

    답변

    From “man grep”:

    세 가지 변형 프로그램 egrep, fgrep 및 rgrep을 사용할 수 있습니다. egrep은 grep -E와 동일합니다. fgrep은 grep -F와 동일합니다. rgrep은 grep -r과 동일합니다. egrep 또는 fgrep과 같은 직접 호출은 더 이상 사용되지 않지만이를 사용하는 기록 애플리케이션이 수정되지 않은 상태로 실행될 수 있도록 제공됩니다.

    댓글

    • 적절한 예를 묻는 질문입니다.

    답변

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

    egrep과 grep의 차이점에 관해서는 egrep이 대부분의 경우 원하는 것이라고 생각합니다. GNU 매뉴얼 사이트 에는 구문에있는 것처럼 보이는 grep과 egrep의 차이점이 나열되어 있습니다. 일부는 슬래시가 필요한 반면 다른 것은 그렇지 않습니다. egrep이 perl regexps 및 javascript regexps와 “호환”되어 있으므로 egrep을 사용하기가 더 쉽습니다.

    Btw. ack 을 시도해 보시기 바랍니다. PREG를 지원하고 더 유용한 기본값을 제공합니다 (예 : 색상 지정, 아마도 원하지 않는 디렉토리 건너 뛰기). .svn과 같이 심볼릭 링크를 따라갈 수 있고 “grep -E보다 ack를 입력하는 것이 조금 더 쉽습니다).

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다