메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Linux egrep 명령어

데브카페

Linux egrep 명령어 완전 가이드

개요

egrepExtended Global Regular Expression Print의 줄임말로, Linux/Unix 시스템에서 확장 정규 표현식을 사용하여 텍스트를 검색하는 명령어입니다. grep -E와 동일한 기능을 제공합니다.

기본 문법

기본 사용법

egrep [옵션] '패턴' [파일명...]

기본 예제:

# 파일에서 특정 문자열 검색
egrep 'error' /var/log/syslog

# 여러 파일에서 검색
egrep 'warning' /var/log/*.log

# 표준입력에서 검색
cat file.txt | egrep 'pattern'

grep vs egrep 차이점

정규 표현식 지원 비교

기능 grep egrep 예제
기본 문자열 검색 O O grep 'hello' file.txt
확장 정규 표현식 X (grep -E 필요) O egrep 'hello|world' file.txt
) grep -E 'a|b' egrep 'a|b' 직접 사용 가능
그룹화 () grep -E '(abc)+' egrep '(abc)+' 직접 사용 가능
수량자 +, ? grep -E 'a+' egrep 'a+' 직접 사용 가능

확장 정규 표현식 패턴

OR 연산자 (|)

# 'error' 또는 'warning' 검색
egrep 'error|warning' /var/log/syslog

# 여러 단어 중 하나
egrep 'apache|nginx|httpd' /var/log/access.log

# 숫자 패턴 (HTTP 상태코드)
egrep '200|404|500' access.log

그룹화 ()

# 그룹을 만들어서 OR 적용
egrep '(error|warn|fail)' /var/log/messages

# 복합 패턴
egrep '(http|https)://(www\.)?[a-zA-Z0-9.-]+' urls.txt

# 반복되는 그룹
egrep '(abc)+' file.txt  # abc, abcabc, abcabcabc 매치

수량자 (+, ?, {})

# + : 1개 이상
egrep 'colou?r' file.txt      # color, colour 매치
egrep 'a+' file.txt           # a, aa, aaa... 매치

# ? : 0개 또는 1개  
egrep 'https?' urls.txt       # http, https 매치

# {n,m} : n개 이상 m개 이하
egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file.txt  # IP 주소

# {n} : 정확히 n개
egrep '[0-9]{4}' file.txt     # 4자리 숫자

주요 옵션

기본 검색 옵션

옵션 설명 예제
-i 대소문자 무시 egrep -i 'error|Error' file.txt
-v 매치되지 않는 라인 출력 egrep -v 'debug|info' log.txt
-n 라인 번호 표시 egrep -n 'error' file.txt
-c 매치된 라인 수만 출력 egrep -c 'warning' *.log
-l 매치된 파일명만 출력 egrep -l 'error' *.log
-L 매치되지 않은 파일명 출력 egrep -L 'success' *.log

고급 옵션

# 컨텍스트 라인 출력
egrep -A 3 -B 3 'error' file.txt     # 매치 전후 3라인 출력
egrep -C 5 'error' file.txt          # 매치 전후 5라인 출력

# 재귀 검색
egrep -r 'error|warning' /var/log/   # 디렉토리 하위 모든 파일

# 파일 타입 제한
egrep -r --include='*.log' 'error' /var/log/
egrep -r --exclude='*.tmp' 'pattern' /path/

# 색상 출력
egrep --color=always 'error|warning' file.txt

실무 활용 예제

로그 분석

# HTTP 상태코드 분석
egrep ' (200|404|500) ' /var/log/apache2/access.log

# IP 주소 추출
egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log

# 에러 레벨 분류
egrep -i '(error|critical|fatal|panic)' /var/log/syslog

# 시간대별 로그 필터링
egrep '^[A-Z][a-z]{2} [0-9]{1,2} (09|10|11):' /var/log/messages

시스템 모니터링

# 프로세스 모니터링
ps aux | egrep '(apache|nginx|mysql)'

# 메모리 사용량 체크
free -h | egrep '(Mem|Swap):'

# 디스크 사용량 확인
df -h | egrep '([8-9][0-9]%|100%)'  # 80% 이상 사용률

# 네트워크 연결 상태
netstat -an | egrep '(LISTEN|ESTABLISHED)'

설정 파일 분석

# Apache 가상호스트 설정
egrep -i '(virtualhost|servername|documentroot)' /etc/apache2/sites-available/*

# SSH 설정 확인
egrep '^(Port|PasswordAuthentication|PubkeyAuthentication)' /etc/ssh/sshd_config

# MySQL 설정
egrep '^(bind-address|port|max_connections)' /etc/mysql/my.cnf

복잡한 패턴 예제

이메일 주소 검색

# 기본 이메일 패턴
egrep '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' file.txt

# 특정 도메인만
egrep '[a-zA-Z0-9._%+-]+@(gmail|yahoo|naver)\.com' emails.txt

전화번호 패턴

# 한국 휴대폰 번호
egrep '01[0-9]-[0-9]{3,4}-[0-9]{4}' contacts.txt

# 다양한 형식 허용
egrep '01[0-9][-. ]?[0-9]{3,4}[-. ]?[0-9]{4}' contacts.txt

URL 패턴

# HTTP/HTTPS URL
egrep 'https?://[a-zA-Z0-9.-]+(/[a-zA-Z0-9./_-]*)?(\?[a-zA-Z0-9=&_%+-]*)?' urls.txt

# 도메인만 추출
egrep -o 'https?://[^/]+' urls.txt

파이프라인과 조합

다른 명령어와 연계

# tail과 조합 (실시간 로그 모니터링)
tail -f /var/log/syslog | egrep --color '(error|warning|critical)'

# sort와 조합 (빈도 분석)
egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq -c | sort -nr

# awk와 조합 (특정 컬럼 추출)
egrep '(GET|POST)' access.log | awk '{print $1, $7}'

# head와 조합 (상위 결과만)
egrep 'error' /var/log/messages | head -20

복합 필터링

# 여러 조건을 AND로 연결
egrep 'error' /var/log/syslog | egrep 'apache'

# NOT 조건과 조합
egrep 'error|warning' /var/log/messages | egrep -v 'debug'

# 시간 범위 필터링
egrep '^Dec (0[1-9]|1[0-9]|2[0-9]|3[01]) (0[8-9]|1[0-7]):' /var/log/syslog

성능 최적화

효율적인 패턴 작성

# 비효율적인 패턴
egrep '.*error.*|.*warning.*' large_file.log

# 효율적인 패턴  
egrep 'error|warning' large_file.log

# 앵커 사용으로 성능 향상
egrep '^ERROR:' log_file.txt           # 라인 시작부터 매치
egrep 'completed$' log_file.txt        # 라인 끝에서 매치

대용량 파일 처리

# 압축 파일 직접 검색
zegrep 'error|warning' compressed.log.gz

# 여러 파일을 병렬로 검색
find /var/log -name "*.log" -print0 | xargs -0 -P 4 egrep -l 'error'

# 메모리 사용량 제한
egrep --mmap 'pattern' large_file.txt

실무 스크립트 예제

로그 분석 스크립트

#!/bin/bash
# 시스템 상태 체크 스크립트

LOG_FILE="/var/log/syslog"
REPORT_FILE="/tmp/system_check_$(date +%Y%m%d_%H%M%S).txt"

echo "=== 시스템 에러 분석 ===" > $REPORT_FILE
echo "분석 시간: $(date)" >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 에러 통계
echo "=== 에러 레벨별 통계 ===" >> $REPORT_FILE
egrep -i '(error|critical|alert|emergency)' $LOG_FILE | \
egrep -o '(error|critical|alert|emergency)' | \
sort | uniq -c | sort -nr >> $REPORT_FILE

echo "" >> $REPORT_FILE

# 최근 에러 로그
echo "=== 최근 10개 에러 ===" >> $REPORT_FILE
egrep -i 'error' $LOG_FILE | tail -10 >> $REPORT_FILE

echo "분석 완료: $REPORT_FILE"

웹서버 모니터링 스크립트

#!/bin/bash
# 웹서버 액세스 로그 분석

ACCESS_LOG="/var/log/apache2/access.log"

echo "=== HTTP 상태코드 통계 ==="
egrep -o ' [0-9]{3} ' $ACCESS_LOG | sort | uniq -c | sort -nr

echo ""
echo "=== 가장 많이 요청된 페이지 TOP 10 ==="
egrep 'GET' $ACCESS_LOG | egrep -o '"GET [^"]*"' | sort | uniq -c | sort -nr | head -10

echo ""
echo "=== 에러 상태코드 (4xx, 5xx) 상세 ==="
egrep ' (4[0-9]{2}|5[0-9]{2}) ' $ACCESS_LOG | tail -20

트러블슈팅

일반적인 문제들

문제 원인 해결방법
패턴이 매치되지 않음 특수문자 이스케이프 필요 egrep '\$[0-9]+' file.txt
너무 많은 결과 패턴이 너무 광범위 더 구체적인 패턴 사용
성능이 느림 비효율적인 정규식 앵커(^, $) 사용으로 최적화
Binary file 경고 바이너리 파일 검색 egrep -a 옵션 사용

디버깅 팁

# 패턴 테스트
echo "test string" | egrep 'test|string'

# 매치된 부분만 출력 (-o 옵션)
egrep -o '[0-9]+' file.txt

# 패턴 설명 (GNU grep)
egrep --help | egrep -i 'regexp'

fgrep, rgrep와의 비교

명령어별 특징

명령어 정규식 지원 성능 적합한 용도
grep 기본 정규식 중간 일반적인 검색
egrep 확장 정규식 중간 복잡한 패턴 검색
fgrep 문자열만 (정규식 X) 빠름 단순 문자열 검색
rgrep 기본 정규식 중간 재귀 검색 (grep -r과 동일)

실무 권장사항

패턴 작성 가이드라인

효율적인 패턴 작성 원칙:

  1. 구체적인 패턴 사용 (.*보다는 정확한 문자 클래스)
  2. 앵커 활용 (^, $)으로 검색 범위 제한
  3. 적절한 수량자 사용 (+, ?, {n,m})
  4. 그룹화 적극 활용으로 가독성 향상

보안 고려사항

# 민감한 정보 검색 시 주의
egrep -i '(password|secret|key)' /var/log/application.log

# 로그 파일 권한 확인
ls -la /var/log/*.log | egrep '^-.*r.*'

참고 자료

관련 명령어

  • grep: 기본 패턴 검색
  • fgrep: 고정 문자열 검색 (빠름)
  • rgrep: 재귀 검색
  • zgrep, zegrep: 압축 파일 검색
  • pgrep: 프로세스 검색

정규 표현식 참고

# 정규식 테스트 도구
man 7 regex           # 정규식 매뉴얼
egrep --help          # 도움말
info grep             # 상세 정보

Comments