grep -e와 grep -E 옵션의 차이점은 무엇입니까?


34

나는 차이를 이해하려고 grep -e하고 grep -E. 이제 grep manpage내가 얻은 것 :

-E, --extended-regexp

PATTERN을 확장 정규식으로 해석하십시오 (아래 참조).

-e 패턴, --regexp = 패턴

패턴으로 PATTERN을 사용하십시오. -로 시작하는 패턴을 보호하는 데 유용

위의 설명은 나에게 이해가되지 않습니다.

그래서 누군가 examples가 두 옵션의 차이점과 사용 옵션의 차이점을 사용하여 설명 할 수 있습니까 ?

PS : 버전 : grep (GNU grep) 2.10



3
그 목적 -e은 실제로 정규 표현식이 대시로 시작할 때 명확하게하는 것입니다. 그래서 grep ---foo제공 unrecognized option: ---foo하지만 당신은 말할 수있는 grep -e ---foo정규 표현식에 대한 grep을 위해 ---foo.
tripleee

답변:


29

-e일치시키려는 패턴을 나타내는 플래그입니다. -E특정 특수 문자를 이스케이프해야하는지 여부를 제어합니다.

man grep-E조금 더 설명 합니다.

   Basic vs Extended Regular Expressions
   In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).

   Traditional  egrep  did  not  support  the  {  meta-character, and some egrep implementations support \{ instead, so portable scripts should avoid { in grep -E patterns and should use [{] to match a
   literal {.

   GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification.  For example, the command grep -E '{1' searches for
   the two-character string {1 instead of reporting a syntax error in the regular expression.  POSIX.2 allows this behavior as an extension, but portable scripts should avoid it.

2
그래서 이것이 특별한 의미를 잃어 버렸기 echo "hello" | grep -o -e 'h|l'때문에 출력을 얻지 못하고 원하는 출력을 얻었을 때의 이유 입니다. |echo "hello" | grep -o -E 'h|l'

2
예. 이 경우 멀리 echo "hello" | grep -o -e 'h' -e 'l'던져 -E버릴 경우 작동합니다 .
hafichuk

3
grep -e -o 'h|l'문자 그대로 일치 h|l하는 동안 grep -e -o 'h\|l'일치 h하거나 l-E와 반대되는 경우
Nahuel Fouilleul

@ronnie은 ... 당신이 "기능"이 SE 사이트간에 당신을 따르지 200 + 명성을 필요로 불행한 일
hafichuk

5

또한 grep -e: 검색을위한 몇 가지 문자열을 사용할 수 있도록 'grep -e 'abc' -e 'def' -e '123'이 문자열의 세를 찾습니다 : abc뿐만 아니라 def123.

이것은 의미 하는 grep 'abc\|def\|123'곳 과 매우 유사 하지만 읽기가 더 명확 할 수 있습니다.\|or

가장 중요한 사실 grep -E이 이미 여기에 설명되어 있으므로이 주제에 대해 요약 한 내용을 비슷한 질문에 추가하고 싶습니다 .Bash에서 이중 문자를 찾기위한 정규 표현식


3

아래 참조

/펼친

grep은 "기본", "확장"및 "perl"이라는 세 가지 정규식 구문 버전을 이해합니다. GNU grep에서는 기본 구문과 확장 구문간에 사용 가능한 기능에 차이가 없습니다. 다른 구현에서는 기본 정규 표현식의 성능이 떨어집니다. 다음 설명은 확장 정규식에 적용됩니다. 기본적인 정규 표현식의 차이점은 나중에 요약됩니다. Perl 정규 표현식은 추가 기능을 제공하며 pcresyntax (3) 및 pcrepattern (3)에 문서화되어 있지만 모든 시스템에서 사용 가능한 것은 아닙니다.

다시 한 번.

GNU grep에서는 기본 구문과 확장 구문간에 사용 가능한 기능에 차이가 없습니다


2
기능은 기본 및 확장과 동일하지만 구문은 약간 다르다. 같은 특수 문자를 정규 표현식 (, ), |등 백 슬래시 이스케이프 기본 정규 표현식에서의 특별한 의미를 가지고 있지만 (그들이 문자열 리터럴로 취급 탈출해야 할 경우) 확장에있을 필요
CAS

1

-e옵션 에 대해 자세히 설명합니다 . -e종종 선택 사항입니다.

grep PATTERN

~와 동일하다

grep -e PATTERN

이전 답변과 매뉴얼 페이지에 명시된 바와 같이 여러 검색 패턴이 있거나 하이픈 (-)으로 시작하는 패턴을 보호하지 않는 한.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.