웹사이트 검색

Linux에서 Grep, Egrep 및 Fgrep의 차이점은 무엇입니까?


파일, 한 줄 또는 파일의 여러 줄 등 무엇이든 검색하는 데 사용할 수 있는 Unix 계열 시스템의 유명한 검색 도구 중 하나는 grep 유틸리티입니다. 문자열 패턴, reg-ex 패턴 또는 perl 기반 reg-ex 등을 사용한 검색과 같이 지원하는 옵션이 많기 때문에 기능이 매우 광범위합니다.

다양한 기능으로 인해 grep, egrep(확장 GREP), fgrep(fgrep)을 포함한 많은 변형이 있습니다. >고정 GREP), pgrep(프로세스 GREP), rgrep(재귀 GREP) 등 그러나 이러한 변형은 인기를 얻었고 특정 작업을 위해 다양한 Linux 프로그래머가 사용하게 된 원래 grep과 약간의 차이가 있습니다.

조사해야 할 주요 사항은 세 가지 주요 변형, 즉 'grep', 'egrep''fgrep' 간의 차이점이 무엇인지입니다. Linux 사용자가 요구 사항에 따라 하나 또는 다른 버전을 선택하도록 하는 grep입니다.

grep의 일부 특수 메타 문자

  1. + – 하나 이상의 이전 문자와 동일합니다.
  2. ? - 이전 문자가 거의 1번 반복됨을 나타냅니다. 예: a?'a' 또는 'aa'와 일치합니다.
  3. ( – 대체 표현식의 시작입니다.
  4. ) – 대체 표현의 끝입니다.
  5. |'|'로 구분된 표현식 중 하나와 일치합니다. 예: “(a|b)cde ”‘abcde’ 또는 ‘bbcde’와 일치합니다.
  6. { – 이 메타 문자는 범위 지정자의 시작을 나타냅니다. 예: “a{2} ”는 파일의 “aa ”와 일치합니다(예: a 2번).
  7. } – 이 메타 문자는 범위 지정자의 끝을 나타냅니다.

grep, egrep 및 fgrep의 차이점

grep, egrepfgrep 간의 주요 차이점은 다음과 같습니다. 이 예제 세트에서는 작업이 수행되는 파일이 다음과 같다고 가정합니다.

그렙 명령

grep 또는 전역 정규 표현식 인쇄는 Unix 계열 시스템의 주요 검색 프로그램으로, 모든 파일이나 파일 목록 또는 모든 파일의 출력에서 모든 유형의 문자열을 검색할 수 있습니다. 명령.

권장 읽기: Linux grep 명령의 12가지 실제 예

일반 문자열 외에 기본 정규 표현식을 검색 패턴으로 사용합니다. BRE(기본 정규 표현식)에서 '{','}','(',')','|' 와 같은 메타 문자 ,'+','?'는 의미를 잃어 문자열의 일반 문자로 취급되며 특수 문자로 취급하려면 이스케이프해야 합니다. .

권장 읽기: 문자 클래스 및 대괄호 표현식에 대한 11가지 고급 'Grep' 명령

또한 grep은 모든 문자열이나 정규식을 빠르게 검색하기 위해 Boyer-Moore 알고리즘을 사용합니다.

grep -C 0 '(f|g)ile' check_file
grep -C 0 '\(f\|g\)ile' check_file

여기서처럼 명령이 '(' ')''|'를 이스케이프하지 않고 실행되면 전체 문자열, 즉 “(f|g)를 검색합니다. )ile” 파일에 있습니다. 그러나 특수 문자가 이스케이프되면 이를 문자열의 일부로 처리하는 대신 grep이 이를 메타 문자로 처리하고 “file ” 또는 “gile ” 단어를 검색했습니다. 파일에서.

Egrep 명령

Egrep 또는 grep -E는 grep 또는 Extended grep의 또 다른 버전입니다. 이 버전의 grep은 메타 문자를 있는 그대로 처리하고 grep처럼 문자열로 대체하지 않으므로 정규식 패턴을 검색할 때 효율적이고 빠릅니다. grep에서. ERE 또는 확장 정규식 세트를 사용합니다.

egrep의 경우 메타 문자를 이스케이프 처리하지 않더라도 문자열의 일부로 처리하는 대신 특수 문자로 처리하여 특별한 의미로 대체합니다.

egrep -C 0 '(f|g)ile' check_file
egrep -C 0 '\(f\|g\)ile' check_file

여기서처럼 egrep은 메타 문자가 이 문자의 의미에 따라 이스케이프되지 않은 경우 “file ” 문자열을 검색했습니다. 그러나 이러한 문자가 이스케이프되면 egrep은 이를 문자열의 일부로 처리하고 파일에서 전체 문자열 “(f|g)ile ”을 검색했습니다.

fgrep 명령

Fgrep 또는 Fixed grep 또는 grep -F는 전체 문자열을 검색할 때 검색 속도가 빠른 grep의 또 다른 버전입니다. 정규식 대신 정규식이나 메타 문자를 인식하지 못하기 때문입니다. 직접 문자열을 검색하려면 이 버전을 선택해야 합니다.

Fgrep은 완전한 문자열을 검색하며 이스케이프되거나 이스케이프되지 않은 경우에도 특수 문자를 정규식의 일부로 인식하지 않습니다.

fgrep -C 0 '(f|g)ile' check_file
fgrep -C 0 '\(f\|g\)ile' check_file

마찬가지로, 메타 문자가 이스케이프되지 않은 경우 fgrep은 파일에서 전체 문자열 “(f|g)ile ”을 검색하고, 메타 문자가 이스케이프된 경우 fgrep 명령은 다음을 검색합니다. “\(f\|g\)ile ” 모든 문자는 파일에 있는 그대로입니다.

우리는 이미 grep 명령의 몇 가지 실제적인 예를 다루었습니다. Linux에서 grep 명령을 더 많이 활용하려면 여기에서 읽을 수 있습니다.

Linux grep 명령의 12가지 실제 사례 알아보기

결론

위에 강조표시된 것은 'grep', 'egrep''fgrep' 사이의 차이점입니다. 사용된 정규식 세트 및 실행 속도의 차이 외에도 나머지 명령줄 매개변수는 세 가지 grep 버전 모두에서 동일하게 유지되며 "egrep " 또는 "fgrep ", "grep -E " 또는 "grep - 대신에도 동일하게 유지됩니다. F”를 사용하는 것이 좋습니다.

이 세 가지 grep 버전 사이에 다른 차이점을 발견하면 의견에 언급해 주세요.