본문 바로가기
프로그래밍/linux

grep 명령어 / 파일 내 특정 문자열 찾기

by 한코코 2022. 11. 18.

grep 명령어란?

리눅스에서 grep 명령어는 파일이나 표준입력(stdin)부터 패턴을 찾아주는 역할을 한다.

간단히 말하자면 특정 파일에서 지정한 문자열이나 정규표현식을 포함한 행을 출력해주는 명령어.

 

 

 

grep 사용법

$ grep [옵션][패턴][파일명]
# or
$ grep [찾고자 하는 명칭][위치]

 

 

 

문자열로 찾기

# /user/tmp 디렉토리에서 'error' 문자열 찾기
$ grep 'error' /user/tmp

# text.txt 파일에서 'error' 문자열이 있는 라인 찾기
$ grep 'error' text.txt

# 여러개의 파일에서 'error' 문자열 찾기
$ grep 'error' text.txt show.txt

# 현재 디렉토리 내에 있는 모든 파일에서 'error' 문자열 찾기
$ grep 'error' *

# 특정 확장자를 가진 모든 파일에서 'error' 문자열 찾기
$ grep 'error' *.log

 

 

 

정규표현식으로 찾기

# 특정 파일에서 문자열이 포함된 행을 찾는다.
grep '^[ab]' 파일명 

# 특정 파일에서 a로 시작하는 모든 단어를 찾는다.
grep 'a*' 파일명 

# 특정 파일에서 a로 시작하고 z로 끝나는 5자리 단어를 찾는다.
grep 'a...z' 파일명 

# 특정 파일에서 a,b,c로 시작하는 단어를 모두 찾는다.
grep [a-c] 파일명

# 특정 파일에서 apple 또는 Apple로 시작하는 단어를 모두 찾는다.
grep [aA]pple 파일명 

# 특정 파일에서 a나 b로 시작되는 모든 행을 찾는다.
grep '^[ab]' 파일명 

# 특정 파일에서 apple로 시작되고 0나 9의 숫자로 끝나로 시작되는 모든 행을 찾는다.
grep 'apple'[0-9] 파일명

 

 

 

자주 사용하는 옵션

  • -c : 일치하는 행의 수를 출력한다.
  • -i : 대소문자를 구별하지 않는다.
  • -v : 일치하지 않는 행만 출력한다.
  • -n : 포함된 행의 번호를 함께 출력한다.
  • -l : 패턴이 포함된 파일의 이름을 출력한다.
  • -w : 단어와 일치하는 행만 출력한다.
  • -x : 라인과 일치하는 행만 출력한다.
  • -r : 하위 디렉토리를 포함한 모든 파일에서 검색한다.
  • -m 숫자 : 최대로 표시될 수 있는 결과를 제한한다.
  • -E : 찾을 패턴을 정규 표현식으로 찾는다.
  • -F : 찾을 패턴을 문자열로 찾는다.
# 사용하는 예시 코드
# /user/tmp 이하 디렉토리를 모두 포함해서 검색
grep -r FintText /user/tmp

# 파일명 목록으로 출력
grep -l FindText /user/tmp

 

 

 

옵션 혼용해서 사용하기

옵션을 다수 지정할때 -뒤에 연속으로 옵션을 기입한다.

# /user/tmp 이하의 모든 디렉토리에서 'FindText' 용어를 대소문자 구분하지 않고 검색
# -r : 하위 디렉토리를 포함한 모든 파일에서 검색.
# -i : 대소문자 구별하지 않고,
grep -ri FindText /user/tmp

 

 

 

grep의 종류

grep : 다중 패턴을 검색하고 정규표현식을 사용한다.

egrep : 정규표현식 패턴으로 검색한다. (-E 옵션과 동일)

fgrep : 문자열 패턴으로 검색하고 정규표현식을 사용하지 않는다. (-F 옵션과 동일)

 

 

 

 

다른 명령어와 같이 사용하기

# 실시간 로그 보기(tail + grep)
tail -f mylog.log | grep 192.168.15.86

# 특정 파일에서 여러개 문자열 찾기
cat mylog.txt | grep 'Apple' | grep 'Banana'

# grep한 결과값을 txt파일로 저장하기
grep -n 'Apple' mylog.txt > result.txt

 

 

출처 블로그

( 여기 설명 진짜 잘해놨다. 다른 리눅스 명령어 설명도 잘 되어있다.)

댓글