egrep : GNU / Linux의 명령 예제

이그렙

GREP GNU / Linux 명령 줄에서 가장 많이 사용되는 도구 중 하나입니다. 매우 간단한 도구 임에도 불구하고 많은 작업을 수행 할 수 있습니다. 특히 파이프와 함께 사용되어 이전 명령 등의 출력에서 ​​특정 지점을 찾을 수 있습니다. 그러나 -E 옵션을 사용하여 grep을 실행하는 것과 동일한 egrep이라는 도구도 있습니다.

e는 "Extended regex"에서 비롯되며, -E 옵션을 활성화하고 해당 옵션을 사용하지 않고 기본적으로 egrep에있는 항목입니다. 즉, 확장 정규식. 이 튜토리얼에서는 정규 표현식이 무엇인지, 어떻게 사용할 수 있는지, * nix에 어떤 유형이 있는지 설명하지 않을 것입니다. egrep으로 할 수있는 몇 가지 유용한 작업의 실제 예를 보여 드리겠습니다.

grep, egrep 및 fgrep은 유사합니다. 실제로 egrep은 grep -E와 동일하고 fgrep는 grep -F와 동일합니다. 즉, 우리와 관련된 경우 패턴도 정규 표현식으로 해석합니다.

줄이나 단어 검색 grep의 경우와 마찬가지로 하나 이상의 파일에서. 예를 들어, snap.txt라는 파일과 현재 디렉토리의 모든 .txt 파일에서 ubuntu라는 단어를 검색한다고 가정 해보십시오.

egrep ubuntu snap.txt

egrep ubuntu *.txt

검색도 가능합니다. 재귀 현재 디렉토리의 전체 내용을 검색하려면 :

egrep -r "hola mundo" *

지금까지 대소 문자 구분 (대소 문자 구분)을 고려하여 정확한 단어 나 문자열을 검색했지만, 대소 문자 구분 모드에서 수행하려면 대문자이든 소문자이든 상관 없습니다, 다음을 사용할 수 있습니다 (w를 추가하면 완전한 일치 만 찾습니다).

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

우연이 아니라 보여 주지만 해당 일치가 발견 된 파일 이름:

egrep -l hola *.txt

패턴 또는 단어 만 표시 문서 내에서 검색 :

egrep -o printf hola.c

상상할 수있는 모든 가능성을 사용할 수 있음을 기억하십시오. 이전에 본 여러 옵션을 결합하거나 -A n 및 -B n과 같은 다른 옵션으로 보완 할 수 있습니다. 여기서 n 이전 (이전)과 이후 (이후)에 표시 할 줄 수 일치 또는 둘 다 동시에 (C), 일치를 둘러싼 내용을 볼 수 있습니다.

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

일치하는 행을 표시하지 않고 일치하지 않는 행만 표시합니다.

egrep -v "dos" números.doc

또는 원하는 경우 사용할 수 있습니다. -e로 여러 단어 또는 일치. 예 :

egrep -v -e "uno" -e "dos" -e "tres" números.txt

사용하는 경우 -c는 일치 수만 계산할 수 있습니다.또는 -v로 반전하여 일치하지 않는 행 수를 표시하십시오. 예를 들면 :

egrep -c "include" main.c

egrep -v -c "include" main.c

그리고 심지어 줄 번호 표시 경기가 발생한 위치 및 각각 차지하는 위치 :

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

그리고 정규식 그 기능은 확장 될 수 있습니다. 예를 들어 Hello로 시작하고 bye로 끝나는 줄을 찾으십시오. 또는 Hello로 시작하고 그 뒤에 무엇이 든 다음 일치 bye가 각각 나타납니다.

* 다음 명령 수정 : 독자 Manuel Alcocer의 의견 덕분에 오류가 발생했기 때문에 다음 명령을 수정할 수있었습니다.

egrep '^Hola.*adiós$' ejemplo.txt

egrep "Hola.*adiós" ejemplo.txt

하지만 grep과의 차이점이 궁금하다면 여기에 분명한 예가 있습니다. -E없이 grep을 사용하는 경우에는 다음을 사용해야합니다. 이스케이프 시퀀스 따라서 특수 문자를 그대로 해석합니다. 그렇지 않으면 패턴을 고려하지 않고 그대로 해석합니다. 반면에 egrep 또는 grep -E를 사용하면이를 고려합니다. 예를 들면 :
grep '^no\(fork\|group\)' /etc/group

이는 다음과 동일합니다.

grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group

즉, nofork 또는 nogroup으로 시작하는 일치하는 행을 찾습니다. 하지만 이스케이프 시퀀스없이 grep의 첫 번째 표현식을 사용한 경우 검색이 수행됩니다. 구체적인 패턴 아니오 (포크 | 그룹) :

grep 'no(fork|group)' /etc/group

검색 할 수도 있습니다. 영숫자 범위또는 특정 IP를 찾기위한 특정 값 :
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks

원하는 경우 다른 정규식을 사용하여보다 구체적인 검색을 수행 할 수 있습니다. 예를 들면 | 하나를 찾기 위해 우연 또는 다른:

egrep -i '^(printf|scanf)' hola.c

당신은 심지어 찾을 수 있습니다 대문자, 소문자, 알파벳 문자 만 또는 영숫자 등, [: alnum :], [: alpha :], [: digit :], [: lower :], [: print :], [: punct :], [: space :], [: upper :] 등 예를 들어 대문자를 검색하려면 :
egrep [[:upper:]] diccioario

도움이 되었으면 좋겠습니다. 곧 정규 표현식을 특별히 다루는 기사에서 설명하겠습니다.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   마누엘 알코 서

    안녕하세요.

    몇 가지 발언 ...

    'egrep'명령을 설명하지만 여기에있는 'egrep'과 'grep'의 차이를 두지 마십시오.

    예를 들면 다음과 같습니다
    grep 사용 : ip -4 a | grep '[0-9] \ +'
    egrep 사용 : ip -4 a | egrep '[0-9] +'

    아, 이것은 틀 렸습니다. 'egrep "Hello. * Bye"example.txt'; 여기서 성공은 파일에 문자열 'Hello'와 그 뒤에 'goodbye'가있는 줄이있을 때 발생합니다.이 줄은 실제로 어떤 것으로 시작하고 끝날 수 있습니다.

    이 기사는 다음과 같이 말합니다.
    egrep '^ Hello. * bye $'example.txt

    그리고 모든 옵션 또는 거의 모든 옵션은 'egrep'이 아닌 'grep'의 옵션입니다.

    안부.

    1.    이삭

      오류를 신고 해 주셔서 감사합니다. 정규 표현식에 대해 언급 한 내용은 이미 두 번째 단락에 넣었습니다. 많은 기사가 있고이 기사가 너무 오래 걸리기 때문에 특정 기사를 그들에게 바칩니다. 인사!

      1.    마누엘 알코 서

        다시 안녕, 아이작.

        두 번째 단락에서는 기본적으로 'egrep'이 'grep -E'의 별칭이라고 말했거나 말 했어야합니다. 그러나 '에 의해 사용될 때와 다르게 작성된 일부 정규식과 함께'egrep '을 사용하는 예는 제공하지 않습니다. grep '.

        확장 된 정규식을 설명하기위한 기사를 제공하는 것은 무엇보다도 대담한 것처럼 보입니다. 광고를하지 않고 GNU 커뮤니티를 위해 매우 중요한 정보 작업을 수행하는 이와 같은 사이트가 있기 때문입니다. https://www.rexegg.com/

        나는 트롤링을 위해 여기에 쓰는 것이 아닙니다.이 모든 것에 대한 나의 의도는 누군가가이 항목을 읽고 'egrep'또는 'grep'의 기능을 확인하는 경우 다른 출처를 살펴보십시오.이 항목은 어떤 것도 참조 할 수 없습니다. , 불필요한 정보를 제공하고 특히 GNU와 GNU가 제공하는 강력한 도구에 대한 지식이없는 사용자에게는 혼란 스러울 수 있습니다.

        마지막으로 첫 번째 댓글 (^ $) 이후에 지적한 버그를 추가하고 수정했습니다. 다른 사이트에서와 마찬가지로 수정 한 사람을 인용했거나 적어도 수정이라고 말 했어야합니다. 즉,이 블로그가 시작된 동일한 기반 인 GNU 기반의 일부입니다. 잃어버린.

        인사말.

        1.    이삭

          당신의 관점에 감사드립니다.

  2.   fsafs

    ffff