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
도움이 되었으면 좋겠습니다. 곧 정규 표현식을 특별히 다루는 기사에서 설명하겠습니다.
안녕하세요.
몇 가지 발언 ...
'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'의 옵션입니다.
안부.
오류를 신고 해 주셔서 감사합니다. 정규 표현식에 대해 언급 한 내용은 이미 두 번째 단락에 넣었습니다. 많은 기사가 있고이 기사가 너무 오래 걸리기 때문에 특정 기사를 그들에게 바칩니다. 인사!
다시 안녕, 아이작.
두 번째 단락에서는 기본적으로 'egrep'이 'grep -E'의 별칭이라고 말했거나 말 했어야합니다. 그러나 '에 의해 사용될 때와 다르게 작성된 일부 정규식과 함께'egrep '을 사용하는 예는 제공하지 않습니다. grep '.
확장 된 정규식을 설명하기위한 기사를 제공하는 것은 무엇보다도 대담한 것처럼 보입니다. 광고를하지 않고 GNU 커뮤니티를 위해 매우 중요한 정보 작업을 수행하는 이와 같은 사이트가 있기 때문입니다. https://www.rexegg.com/
나는 트롤링을 위해 여기에 쓰는 것이 아닙니다.이 모든 것에 대한 나의 의도는 누군가가이 항목을 읽고 'egrep'또는 'grep'의 기능을 확인하는 경우 다른 출처를 살펴보십시오.이 항목은 어떤 것도 참조 할 수 없습니다. , 불필요한 정보를 제공하고 특히 GNU와 GNU가 제공하는 강력한 도구에 대한 지식이없는 사용자에게는 혼란 스러울 수 있습니다.
마지막으로 첫 번째 댓글 (^ $) 이후에 지적한 버그를 추가하고 수정했습니다. 다른 사이트에서와 마찬가지로 수정 한 사람을 인용했거나 적어도 수정이라고 말 했어야합니다. 즉,이 블로그가 시작된 동일한 기반 인 GNU 기반의 일부입니다. 잃어버린.
인사말.
당신의 관점에 감사드립니다.
ffff