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


파일이든 파일이든 한 줄이든 또는 여러 줄이든 검색하는 데 사용할 수있는 유닉스 계열 시스템의 유명한 검색 도구 중 하나는 grep 유틸리티입니다. 문자열 패턴, 정규식 패턴 또는 펄 기반 정규식 등을 사용한 검색과 같이 지원하는 많은 옵션에 기인 할 수있는 매우 방대한 기능입니다.

다양한 기능으로 인해 grep, egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (Recursive GREP) 등 많은 변형이 있습니다. 그러나 이러한 변형은 원래 grep과 약간의 차이가 있습니다. 특정 작업을 위해 다양한 Linux 프로그래머가 사용합니다.

조사해야 할 주요 사항은 Linux 사용자가 요구 사항에 따라 하나 또는 다른 버전을 선택하게 만드는 grep의 'grep', 'egrep'및 'fgrep'과 같은 세 가지 주요 변형 간의 차이점입니다.

grep의 일부 특수 메타 문자

  1. + – Equivalent to one or more occurrences of previous character.
  2. ? – This denotes almost 1 repetition of previous character. Like: a? Would match ‘a’ or ‘aa’.
  3. ( – Start of alternation expression.
  4. ) – End of alternation expression.
  5. | – Matching either of the expression separated by '|'. Like: “(a|b)cde” would match either ‘abcde’ or ‘bbcde’.
  6. { – This meta-character indicates start of range specifier. Like: “a{2}” matches “aa” in file i.e. a 2 times.
  7. } – This meta-character indicates end of range specifier.

grep, egrep 및 fgrep의 차이점

grep, egrep 및 fgrep의 주요 차이점은 다음과 같이 강조 표시 할 수 있습니다. 이 예제 세트의 경우 작업이 수행되는 파일이 다음과 같다고 가정합니다.

grep 또는 Global Regular Expression Print는 모든 파일 또는 파일 목록 또는 명령의 출력에서 모든 유형의 문자열을 검색 할 수있는 Unix 계열 시스템의 기본 검색 프로그램입니다.

검색 패턴으로 일반 문자열과는 별도로 기본 정규식을 사용합니다. "BRE (Basic Regular Expressions)에서 메타 문자는 다음과 같습니다. '{', '}', '(', ')', '|'< "/ code>, '+', '?'는 의미를 잃고 문자열의 일반 문자로 처리되며 특수 문자로 처리하려면 이스케이프해야합니다. ".

또한 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 또는 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 또는 Fixed grep 또는 grep -F는 정규 표현식이나 메타 문자를 인식하지 못하기 때문에 정규 표현식 대신 전체 문자열을 검색 할 때 검색 속도가 빠른 또 다른 grep 버전입니다. 직접 문자열을 검색하려면 선택해야하는 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" 파일에있는 모든 문자.

Linux에서 grep 명령을 더 많이 사용하려는 경우 여기에서 읽을 수있는 grep 명령의 몇 가지 실용적인 예를 이미 다뤘습니다.

결론

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

이 세 가지 버전의 grep 사이에 다른 차이점이 있으면 의견에 언급하십시오.