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의 일부 특수 메타 문자
+
– Equivalent to one or more occurrences of previous character.?
– This denotes almost 1 repetition of previous character. Like:a?
Would match ‘a’ or ‘aa’.(
– Start of alternation expression.)
– End of alternation expression.|
– Matching either of the expression separated by'|'
. Like:“(a|b)cde”
would match either ‘abcde’ or ‘bbcde’.{
– This meta-character indicates start of range specifier. Like:“a{2}”
matches “aa” in file i.e. a 2 times.}
– 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 사이에 다른 차이점이 있으면 의견에 언급하십시오.