[맥 터미널 / Unix] grep 커맨드로 파일 내부의 패턴 찾기

Unix 환경(맥 터미널)에서 활용되는 grep 커맨드를 이용하여 파일 내부의 패턴을 찾는 방법에 관한 글입니다. 아래 목록을 참고하여 필요한 내용 확인하시기 바랍니다.

  • grep : ‘global / regular expression / print’으로 파일이나 표준 입력을 검색하여, 정규표현식에 부합하는 내용을을 찾아 출력해주는 커맨드

grep 커맨드 기본 내용

파일 내의 패턴을 검색할 때 ‘grep’ 커맨드는 아주 유용한 커맨드입니다. 예시에 앞서 ‘grep’에 관한 기본적인 내용들을 정리해보았습니다. 정규표현식을 익혀두고 함께 사용하시면 더욱 유용합니다.

기본 문법 ▼

grep 'word' filename

유용한 옵션 ▼

  • -i : 대소문자 구별 X
  • -r : recursive 옵션으로 디렉토리 내의 모든 파일에 같은 커맨드 반복
  • -l : 매칭 라인과 파일 이름만 출력
  • -v : 매칭되지 않는 라인만 출력
  • -c : 매칭라인의 개수만 출력
  • -n : 매칭된 라인 넘버 출력
  • -A[n] : [n] 값은 숫자, 매칭된 라인 뒤의 n개의 라인 출력(예: -A2)
  • -B[n] : [n] 값은 숫자, 매칭된 라인 앞의 n개의 라인 출력(예: -B2)
  • -C[n] : [n] 값은 숫자, 매칭된 라인 앞,뒤의 n개의 라인 출력(예: -C2)

매치되는 패턴에 색 입히기 ▼

grep --color=always "far" example3.txt

~/.bash_profile 등에 아래 내용으로 쉘 환경을 사전 설정해두시면 grep 커맨드 실행마다 색을 출력합니다.

GREP_OPTIONS="--color=always";export GREP_OPTIONS


grep 커맨드 예시

단순히 설명을 위해 ~/Test 디렉토리 안에 더미 텍스트 파일을 3개 생성하고 진행하였습니다.

~/Test (521) $ ls
./        .DS_Store    example2.txt
../        example1.txt    example3.txt

 

파일 안의 내용 찾기

특정 문자열 패턴이 있는 파일에서 해당 내용을 출력해주는 방법입니다.

현재 디렉토리 내의 모든 파일 중 ‘far’ 문자열 패턴 찾기 ▼

$grep "far" *

출력 예시 ▼

현재 디렉토리 내의 모든 파일 중 ‘far’ 문자열 패턴을 대소문자 구별하지 않고 찾기 

$grep -i "far" *
  • -i : 대소문자 구별 X

출력 예시 ▼

Recursive option(-r, -R)을 통해 현재 디렉토리 내의 모든 파일에서 ‘far’ 패턴 찾기 

$grep -r "far" .
  • -r : recursive 옵션으로 디렉토리 내의 모든 파일을 대상으로 같은 커맨드 반복

출력 예시 ▼

 

파이프 옵션을 통해 출력된 결과물에서 패턴 검색

grep 커맨드를 파이프 옵션으로 다른 커맨드와 조합해서 사용하는 방법입니다. 아래 예시는 ls 커맨드를 통해 파일 리스트를 출력 후에 ‘sep’이 들어가는 패턴을 대소문자 구별없이(-i) 찾는 경우입니다.

입력

$ ls -l | grep -i "sep"
  • -i : 대소문자 구분 X

출력 예시 ▼

 

입력된 패턴의 라인을 가지지 않는 파일만 출력

현재 디렉토리 내에 특정 문자열 패턴을 가지고 있지 않은 파일만 출력하는 방법입니다. 아래 예시는 ‘far’라는 문자열을 포함하지 않는 라인을 가진 파일들만 출력하는 경우입니다.

입력 ▼

$ grep -lv "far" *
  • -l : 매칭라인과 파일 이름만 출력
  • -v : 매칭되지 않는 라인만 출력

출력 예시 ▼

 

두가지 다른 패턴 찾기

특정 파일에서 문자열 패턴을 찾아 출력하는 방법입니다. 아래 예시는 ‘example3.txt’ 파일 내에서 ‘far’ 혹은 ‘Far’라는 문자열 패턴 찾아 출력하는 경우입니다.

입력 ▼

$ grep "far\|Far" example3.txt
$ grep "[fF]ar" example3.txt

출력 예시 ▼

 

매칭되는 라인 수 카운트하기

현재 디렉토리 내의 모든 파일 중 특정 문자열을 가진 라인을 카운트하는 방법입니다. 아래 예시는 ‘far’라는 문자열을 가진 라인 카운트하는 경우입니다.

입력 ▼

$ grep -c "far" *

출력 예시 ▼

example1.txt:0
example2.txt:0
example3.txt:2

이상입니다.

참고

댓글 남기기