Grep

Grep

  • 출력이나 파일 내에서 특정 문자열이나 패턴을 검색하는 명령어.
  • Global Regular Expression Print의 약자
1
2
3
4
5
# e.g. server.log 파일에서 "error"가 포함된 모든 줄을 출력
grep "error" server.log

# e.g. 파일을 실시간으로 읽으면서, "error"가 포함된 줄만 출력
tail -f ./server.log | grep "error"

AND 조건 검색

  • 두 개 이상의 조건을 만족하는 AND 조건 검색
  • 파이프(|)를 사용해 두 조건을 묶는다.
  • 위 명령어를 해석하면 server.log 에서 “error” 가 포함된 줄을 먼저 찾고,
  • 그 중 “database” 가 포함된 줄을 다시 한 번 필터링 하는 것이다.
1
2
3
4
5
# e.g. server.log 파일에서 "error"와 "database" 를 동시에 포함하는 줄 출력
grep "error" server.log | grep "database"

# 실시간 출력에서 AND 검색
tail -f ./server.log | grep "error" | grep "database"
  • 또한 파이프를 여러 개 묶으면 더 많은 조건을 걸 수도 있다.
1
tail -f ./server.log | grep "error" | grep "database" | grep "root"

OR 조건 검색

  • 두 개 이상의 조건 중 최소 하나의 조건을 만족하는 OR 검색
  • -e 옵션 (--regexp 와 동일) 을 사용한다.
  • “정규표현식”에 해당한다.
1
2
3
4
5
6
7
8
# e.g. "error" 또는 "database" 를 포함하는 줄 출력
grep -e "error" -e "database" server.log

# 실시간 출력에서 OR 검색  
tail -f ./server.log | grep -e "error" -e "database"

# --regexp 와 동일
tail -f ./server.log | grep --regexp "error" --regexp "database"

NOT 조건 검색

  • 특정 조건을 제외한 나머지를 검색하는 옵션
  • -v 옵션 (--invert-match 와 동일) 을 사용한다.
  • “일치 반전” 이라고 직역할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
# e.g. "error" 줄을 제외하고 출력
grep -v "error" server.log

# 실시간 출력에서 NOT 검색
tail -f ./server.log | grep -v "error"

# --invert-match 와 동일
tail -f ./server.log | grep --invert-match "error"

# 두 개 이상의 not 조건은 -v 옵션을 파이프로 묶으면 됨
cat ./server.log | grep -v "error" | grep -v "database"

Grep 의 옵션

옵션 설명
-i 대소문자 구분 없이 검색
-v 지정한 패턴을 포함하지 않는 줄 출력
-r 또는 -R 하위 디렉토리까지 재귀적으로 검색
-n 줄 번호 함께 출력
-l 매치된 파일 이름만 출력
-c 매치된 줄의 개수 출력
-o 매치된 문자열만 출력
-e 여러 패턴을 OR 조건으로 검색
-w 단어 단위로 일치하는 것만 검색

Comments