답변:
역사적으로 이러한 스위치는 별도의 바이너리로 제공되었습니다. 정말 오래된 유닉스 시스템에서는 별도의 바이너리를 호출해야하지만 모든 최신 시스템에서는 스위치가 선호됩니다. grep 매뉴얼 페이지에 이에 대한 세부 사항이 있습니다.
그들이하는 일에 관해서는, -E
grep을 특수 모드로 전환하여 표현식이 일반적인 패턴 일치와 달리 ERE (Extended Regular Expression)로 평가됩니다. 이 구문에 대한 자세한 내용은 매뉴얼 페이지에 있습니다.
-E, --extended-regexp
PATTERN을 확장 정규식으로 해석
-F
스위치는 일치하는 패턴을 받아들이는 다른 모드로 그렙 전환, 그러나 한 줄에 하나의 검색 문자열에 그 패턴을 분할하고 특별한 패턴 매칭을 수행하지 않고 문자열의에 대해 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
egrep
또는 이 없습니다 fgrep
; -E
및 -F
표준입니다. 실제로 작은 비 호환성이 있습니다 egrep
: {
약간 다르게 취급합니다 .
fgrep
Aho-Corasick 백엔드를 grep
사용하고 Commentz-Walter의 수정 된 버전 을 사용합니다. 이는 grep
최악의 경우 O (mn) 복잡성 을 가지지 만 최악 fgrep
의 O (m + n) 임을 의미합니다 .
egrep
했고 grep -E
BusyBox와 BSD grep과 같은 다른 실행 파일에 의해 처리되었습니다. 두 변형은 Posix가 아닌 정규 표현식 구조와 같은 동작 차이를 가졌습니다 \s
. 이로 인해 많은 혼란이
보낸 사람 man grep
:
egrep는 grep -E와 동일합니다. fgrep는 grep -F와 동일합니다. egrep 또는 fgrep는 더 이상 사용되지 않지만 과거 응용 프로그램을 허용하도록 제공됩니다. 수정되지 않은 상태로 실행하는 데 의존합니다.
당신은 사용 fgrep
또는 grep -F
당신이 경우 하지 않습니다 원하는 grepped 문자열은 패턴으로 해석 될 수 있습니다.
당신이 사용 egrep
하거나 grep -E
필요한 경우 확장 된 정규 표현식을 사용합니다.
egrep
와 fgrep
동등 기본적으로 있습니다 grep -E
및 grep -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.)
오류 메시지는 다를 수 있습니다.
완전 문자열을 검색하고 전달한 문자열이 완전하게 해석되도록하려면 (예 : 점 또는 물음표가 다른 것으로 해석 될 위험이없는 경우) fgrep 또는 egrep -F를 사용하십시오.
egrep과 grep의 차이점은 egrep이 대부분 원하는 것입니다. GNU 매뉴얼 사이트 에는 grep과 egrep의 차이점이 구문에 나와 있습니다. egrep이 perl regexp 및 javascript regexp와 더 "호환"되므로 egrep을 사용하는 것이 더 쉽습니다.
Btw. 나는 당신에게 ack 을 시도해 볼 것을 권장 한다-PREG를 지원하고 더 유용한 기본값을 가지고있다 (예 : 채색, .svn과 같은 원하지 않는 디렉토리를 건너 뛰기, 심볼릭 링크를 따르는 능력, 타이핑하기가 조금 더 쉽다) grep -E보다 ack).