본문 바로가기

정리/구현

빠르게! grep 사용법 이해하기

728x90

grep 사용법은 크게 두 분류로 나눌 수 있다.

grep 독자적인 사용시의 방법 하나와 grep 과 다른 명령어(find, xarg...)를 혼용하는 사용법이다.

이 글에선 전자에 대해 설명하겠다.


grep 을 설명하기 이전에 이것만 아시길 grep 은 기본적으로 관련 행을 찾아주는 검색 도구.




아래는 grep 기본 사용법이다.


$ grep   -옵션   '찾고자 하는 내용'    파일이름 

예) $grep    -v    '\<[a-zA-Z0-9]\{1,2\}\>'   test


위의 예에 설명을 덧붙이면 -v 옵션으로 test 파일에 있는 작은 따옴표 내용을 검색한다.

이때 -v 는  작은 따옴표 내용을 뺀 나머지를 보인다는 말이다.

작은 따옴표 내용은 임의의 모든 에서 알파벳 소문자 또는 대분자 나  숫자가 1개나 2개로 구성된 word를 가리킨다.

(여기서 의외로 중요한 사실은 한 행에 대한 검색 결과란 거다.)


이처럼 grep을 사용하기 위해선 기본적인 option을 줄줄 알아야 한다. 

grep 사용자라면 $grep --help 명령어 정도는 한번씩 실행해서 사용하는게 일반적이다.

그중  많이 쓰는 grep option을 추려서 설명하면

-o  :  only -matching 으로 grep 명령어로 대상을 찾으면 행을 반환해주는 반면 -o 옵션을 주면 해당 단어를 반환해준다.

따라서 grep 을 이용하여 문자열을 찾아 다른 연산을 위해 검색할 때 좋다.

-a : 검색하려는 대상을 text로 인식하고 검색을 적용한다.

-n : 결과에 라인을 넣는다.( 파일로 생성하지 않고 그냥 터미널 상에 보일때 유용)

-r : recursive 로 하위 디텍토리도 검사한다.

-v : 찾고자하는 대상을 뺀 나머지를 결과값으로.

> : 좌측의 결과값을 오른쪽 이름의 파일로 저장하는 터미널 문법


예)  -o 옵션의 차이

$grep   -aon     '[a-z]'    test1 > test2

하면 test1 에서 알파벳 소문자 한개라도 들어있는 대상이 나오면 그것을 찾고 라인을 쓰고 그 찾은 대상을 test2에 적는다.

#test1 파일

asbhjahbjshb

aBaBaBaB

AAAAAAAAAA

aBBBBBBBBb

FFFFFFFF

#test2 파일

유추 해보는 것도 좋죠.


예)

$grep   -an     '[a-z]'    test1 > test3

#test1 파일

asbhjahbjshb

aBaBaBaB

AAAAAAAAAA

aBBBBBBBBb

FFFFFFFF

#test3 파일

유추 해보시는 것도 좋겠네요 ㅎㅎ

-o 를 없애니 행 전체를 불러낸다.




단어만 검색하고자 한다면

예)

$grep -ao 'abc' test1

test1 파일에서 abc 를 검색하여 그 대상만 찾아준다.

#test1 파일

  1 abcakshjdkahskdhas

  2 abcABCABCabc

  3 abbcABCac

  4 askdjkasjdkjsdkabc


검색결과는

abc

abc

abc

abc

...

로 추정되며 굳이 실행해보지 않았도 된다.


아래는 $grep --help 수행한 본문이다.







이 다음은
grep에서 쓰는 정규식 표현법이다.
이는 여백이 부족하여 링크를 한다.

한국어 문서
http://devangelma.tistory.com/attachment/hk11.pdf
http://devangelma.tistory.com/attachment/hk12.pdf

외국 문서
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
훗날 이를 다시 정리해볼 예정.