출처:http://genes1s.egloos.com/2464610
egrep 메타문자
메타 문자 | 기능 | 사용 예 | 설명 |
^ | 행의 시작 지시자 | '^love' | love로 시작하는 모든 행과 대응 |
$ | 행의 끝 지시자 | 'love$' | love로 끝나는 모든 행과 대응 |
. | 하나의 문자와 대응 | 'l..e' | l 다음에 두 글자가 나오고 e로 끝나는 문자열을 포함하는 행과 대응 |
* | 선행 문자와 같은 문자의 0개 이상의 개수와 대응 | ' *love' | 0개 이상의 공백 문자 후에 love로 끝나는 문자열을 포함한 행과 대응 |
[ ] | [ ]사이의 문자집합 중 하나와 대응 | '[Ll]ove' | love나 Love를 포함하는 행과 대응 |
[^ ] | 문자집합에 속하지 않는 한 문자와 대응 | '[^A-KM-Z]ove' | A와 K 사이의 범위에 포함되지 않거나, M과 Z 사이에 포함되지 않는 한 문자와 ove가 붙어 있는 문자열과 대응 |
+ | 선행문자와 같은 문자의 1개 이상의 개수와 대응 | '[a-z]+ove' | a와 z 사이의 1개 이상의 문자와 ove가 붙어있는 문자열과 대응(ex: move, love, ...) |
? | 선행문자와 같은 문자의 0개 혹은 1개와 대응 | 'lo?ve' | l 다음에 o가 0개 혹은 1개이고 ve가 붙어있는 문자열과 대응. love 혹은 lve. |
a|b | a 혹은 b와 대응 | 'love|hate' | love 혹은 hate와 대응 |
( ) | 정규표현식을 묶어준다 | 'lov(able|ely)''(ov)+' | lovable 혹은 lovely와 대응ov가 한 번 이상 등장하는 문자열과 대응 |
egrep(extended grep)은 grep 명령어의 좀더 확장된 버젼으로 패턴을 확장 정규 표현식으로 나타내어 grep보다 더 다양하게 패턴을 나타낸다. 다시 말하면, 좀 더 확장된 정규표현식을 메타 문자를 사용할 수 있다. 다만 grep에서 사용할 수 있었던 \{와 \{ 는 지원하지 않는다. 그러나 egrep에서 사용할 수 있는 메타 문자를 이용하면 훨씬 편리하게 정규표현식을 사용할 수 있다.
egrep는 동일 파일에서 여러 단어를 찾을 때 사용하면 편리하다.
grep, egrep, fgrep의 차이를 간단히 요약하여 정리하면 다음과 같다.
fgrep | grep | egrep |
---|---|---|
정규 표현식을 사용하지 않음 | 정규 표현식을 사용함 | 정규 표현식과 확장 표현식을 사용 |
-c | count 옵션은 파일 이름 다음에 패턴이 들어 있는 라인의 수를 표시 |
---|---|
-h | hide 옵션은 파일이름을 출력하지 않음 |
-i | ignore옵션은 대소문자 구분하지 않고 찾음 |
-l | 매칭되는 라인이 있는 파일이름을 한번만 출력 |
-n | line number 옵션은 출력하는 각 라인에 라인번호를 붙임 |
-v | inverse 옵션은 패턴이 없는 라인만 출력 |
-w | word 옵션은 패턴 자체가 완전한 단얼로 독립되었을 경우만 글자로 인식함 |
그중 하나는 fgrep(fixed grep 또는 fast grep) 명령어로 이 명령어는 정규 표현식이 아닌 단순한 문자열만을 인수로 사용한다.
또 하나의 명령어인 egrep(extended grep) 명령어는 fgrep와는 반대로 grep보다 더 다양한 정규 표현식을 사용할 수 있다. 일반적으로 grep 명령어가 제일 사용하기 편리하다.
【예제】 % cat aa jinpo 202.31.146.123 radio 202.31.146.122 knusun1 202.30.55.11 knu2000 202.30.55.15 % grep 11 aa radio 202.31.146.122 knusun1 202.30.55.11
fgrep 명령은 grep와 비슷하지만, 다중 표적 탐색에 쓸 수 있으나, 패턴 탐색을 위한 정규 표현식은 허용되지 않고, grep보다 빠르다. fgrep에서 다중 표적을 줄 때는 각 표적이 분리된 라인으로 하여야 되고, 다중 표적 설정 시 인용부호로 묶어야 한다.
【예제】 # fgrep "jinpo > knusun1" aa jinpo 202.31.146.123 knusun1 202.30.55.11
egrep는 grep 명령 패밀리 중 가장 강력하다. fgrep처럼 다중 표적 탐색을 할 수 있고, 표적 설정에 정규 표현식을 쓸 수 있으며, 보다 완전하고 강력한 정규 표현식을 제공한다. egrep 명령은 문자 반복에 +, 0이나 ?을 사용할 수 있고, egrep는 다중 표적을 fgrep처럼 분리된 라인에 넣거나, 수직 바나 파이프 기호(¦)로 구분한다. 파이프 기호와 표적사이에는 빈칸이 없어야 한다.
【예제】 # egrep "jinpo > radio" aa jinpo 202.31.146.123 radio 202.31.146.122 # egrep "jinpo¦radio" aa jinpo 202.31.146.123 radio 202.31.146.122 #egrep 명령은 두 세가지 문자열을 동시에 찾아야 할때는 egrep을 쓰면 아주 편하다.
명령어 구분 | 명령어 | 실행결과 |
---|---|---|
grep | % grep sys /etc/passwd; grep adm /etc/passwd | sys:x:3:3::/: adm:x:4:4:Admin:/var/adm: |
egrep | % egrep 'sys¦adm' /etc/passwd | sys:x:3:3::/: adm:x:4:4:Admin:/var/adm: |
【예제】
$ grep 'Network' /etc/passwdlisten:x:37:4:Network Admin:/usr/net/nls:$ grep 'uucp' /etc/passwduucp:x:5:5:uucp Admin:/usr/lib/uucp:nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico$ egrep '(Network¦uucp)' /etc/passwduucp:x:5:5:uucp Admin:/usr/lib/uucp:nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucicolisten:x:37:4:Network Admin:/usr/net/nls:$
grep | 정규 표현식을 사용하여 파일에서 문자열을 찾음 |
---|---|
egrep | 정규 표현식과 확장 정규 표현식을 사용하여 파일에서 여러 개의 문자열을 찾을때 편리 |
fgrep | 정규 표현식을 사용하지 않기 때문에 메타문자 따위도 파일에서 찾을 수 있음 |
pgrep | 지정한 프로세스를 찾음 (cf: ps -A) |
SUDO 명령어 사용 시 참고 (0) | 2014.02.26 |
---|---|
rabbitmq plugins enable (0) | 2014.02.13 |
/var/log/message에 찍히는 rsync 로그 제외하기 (3) | 2014.01.28 |
crontab 관련 (0) | 2014.01.27 |
CRONTAB error(user uid 변경 후 유의) (0) | 2014.01.27 |