2010년 2월 25일 목요일

[펌]egrep 사용

nell님의 이글루

 

# 두 라인 이상을 보고자 할 경우 (egrep을 사용한다.)

ex) tail -f 20050711.log | egrep '(POP3|logged in)' > 20050711_pop3.log

로그 예)
==========================================================================
[1110232:00004-00772] 2005/07/11 01:55:29 PM  POP3 Server:
김길동 /  logged in
[1110232:00004-00772] 2005/07/11 01:55:29 PM  POP3 Server: 172.21.42.44
disconnected
==========================================================================


-  egrep으로 or 검색은 되지만 and 검색은 pipe로 한다.


- ABC와 XYZ 가 포함되어 있는 라인을 검색하려면, (AND 검색)
ex) egrep "ABC" *.dat | egrep "XYZ"


- ABC가 포함되어 있거나 XYZ가 포함되어 있는 라인을 검색하려면, (OR 검색)
ex) egrep "ABC|XYZ" *.dat


- ABC는 포함되어 있지만 XYZ가 없는 라인을 검색하려면,
ex) egrep "ABC" *.dat | egrep -v "XYZ"





egrep -v '^$' abc.txt 

설명)  이 명령은 abc.txt라는 파일에서 ^$ 이라는 패턴이 포함되지 않는 문장을 찾아 출력하는 것입니다.
-v 옵션이 지정한 패턴을 제외한 나머지라는 의미를 가지고 있습니다.

^는 앞에서 문장의 시작이라고 말씀드렸고 $는 문장의 끝이라고 설명해 드렸습니다.
따라서 ^$는 문장의 시작이 오고 다음에 문장이 끝이 오는 패턴 즉 공백문자열을 의미합니다.

결국 위 명령은 abc.txt에서 공백라인을 제거하고 출력하라는 의미를 가지게 됩니다.


egrep '^my name' abc.txt

설명) 이 명령은 abc.txt라는 파일에서 '^my name'라는 패턴을 찾는 것입니다.

지정한 패턴은 문장의 시작이 오고 그 뒤로 차례대로 m,y,공백,n,a,m,e가 오는 패턴입니다.

결국 my name 으로 시작하는 문장을 의미한다고 봐도 무방합니다.

따라서 위 명령은 abc.txt.라는 파일에서 my name으로 시작하는 문장을 찾아 출력하라는 의미를 가지게 됩니다.

my name is chiwoo 와 같은 문장이 이런 패턴과 일치하게 됩니다.


egrep 'naver$' abc.txt

설명) 이 명령은 abc.txt라는 파일에서 'naver$'라는 패턴이 포함되어 있는 문장을 찾아 출력하는 것입니다.
지정한 패턴은 차례대로 n,a,v,e,r,문장의 끝이 오는 패턴입니다.

결국 위 명령은 naver로 끝나는 문장을 찾아 출력하라는 의미를 가지게 됩니다.

my favorite mail site is the naver 와 같은 문장이 이런 패턴에 해당하겠죠.


egrep '(abc|def)$'  test.txt  하시면 됩니다.

이렇게 하면 test.txt에 포함되어 있는 라인 중 abc 또는 def로 끝나는 라인을 모두 찾아서 출력해 줍니다.

질문에 'abc로 끝나는 파일' 이라는 표현을 쓰셨는데,
grep이나 egrep은 입력된 문자열 또는 입력파일내 문자열에서 지정한 패턴을 포함한 라인을 찾아서 출력해 주는 프로그램이구요, 
만약 ls와 egrep을 이용하여 파일의 이름 중 abc 또는 def로 끝나는 파일을 찾고자 하시는 것이라면 다음과 같이 하시면 됩니다.


ls -1 | egrep '(abc|def)$'

위에서 -1은 숫자 1입니다. 한라인에 파일 이름 하나씩 출력하라는 의미죠.



egrep '^naver$' abc.txt

설명) 위 명령은  차례대로 문장의시작,n,a,v,e,r,문장의끝이 오는 패턴을 포함하는 문장을 찾아 출력하라는 의미를 가지고 있습니다.

결국 naver라는 한 단어로 이루어진 문장만을 찾아 출력하게 되겠죠.

예를들면..

naver         <== 이건 패턴과 일치합니다.

naver naver   <== 이건 패턴과 일치하지 않습니다.

0 개의 댓글:

댓글 쓰기