개발자라면 반드시 알아야 할 grep! 오늘은 grep의 모든 것을 알아보겠습니다.
grep이란? 🤔
grep은 "Global Regular Expression Print"의 약자입니다.
파일이나 입력 스트림에서 특정 패턴을 검색하는 강력한 명령어 도구예요.
마치 도서관에서 책을 찾는 사서처럼, grep은 텍스트 파일에서 원하는 내용을 빠르게 찾아줍니다!
기본 문법 📝
grep [옵션] 패턴 파일명
주요 옵션들 🛠️
-i (ignore-case)
- 대소문자 구분 없이 검색
grep -i "hello" file.txt
- 대소문자 구분 없이 검색
-r (recursive)
- 하위 디렉토리까지 재귀적으로 검색
grep -r "TODO" /project
- 하위 디렉토리까지 재귀적으로 검색
-n (line-number)
- 매칭된 라인 번호 표시
grep -n "error" log.txt
- 매칭된 라인 번호 표시
-v (invert-match)
- 패턴과 일치하지 않는 라인 출력
grep -v "debug" log.txt
- 패턴과 일치하지 않는 라인 출력
-l (files-with-matches)
- 매칭된 파일 이름만 출력
grep -l "TODO" *.java
- 매칭된 파일 이름만 출력
실전 활용 예시 💪
1. 로그 파일 분석
# 에러 로그만 추출
grep "ERROR" application.log
# 특정 시간대의 로그 검색
grep "2024-03-" application.log
2. 소스 코드 검색
# TODO 주석 찾기
grep -r "TODO" src/
# 특정 함수 사용 검색
grep -r "getUserById" .
3. 복잡한 패턴 매칭
# 이메일 주소 찾기
grep -E "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}" file.txt
# IP 주소 찾기
grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log
고급 테크닉 🚀
1. 컨텍스트 표시
# 매칭된 라인 전후 3줄 표시
grep -A 3 -B 3 "exception" error.log
2. OR 검색
# error 또는 warning 검색
grep -E "error|warning" log.txt
3. 단어 단위 매칭
# "test"라는 단어만 검색 (testing, tested 등은 제외)
grep -w "test" file.txt
성능 최적화 팁 💡
적절한 옵션 사용
- 큰 파일에서는
-l
옵션으로 빠른 검색 - 바이너리 파일 제외시
--binary-files=without-match
- 큰 파일에서는
정규표현식 최적화
- 복잡한 정규식은 성능 저하 유발
- 가능하면 단순한 패턴 사용
파이프라인 활용
# 결과 정렬 후 중복 제거 grep "error" *.log | sort | uniq
자주 하는 실수들 ⚠️
너무 광범위한 패턴
- 검색 범위를 구체적으로 지정하기
정규식 특수문자 처리 실수
- 메타문자는 이스케이프 처리 필요
grep "\." file.txt # 점(.) 문자 검색
- 메타문자는 이스케이프 처리 필요
대소문자 구분 실수
- 필요한 경우
-i
옵션 사용
- 필요한 경우
References 📚
- GNU Grep Manual: https://www.gnu.org/software/grep/manual/
- Linux Documentation Project: https://tldp.org/
- Unix & Linux Stack Exchange: https://unix.stackexchange.com/
- The Linux Command Line (William Shotts)
728x90
'100===Dev Ops > Linux' 카테고리의 다른 글
Netstat 명령어 완벽 가이드 🔍 (1) | 2024.11.17 |
---|---|
실무에서 자주 쓰는 리눅스 명령어 모음 🐧 (0) | 2024.11.03 |
PermitRootLogin SSH Security Policy Explained (0) | 2024.06.11 |
Linux: The Powerhouse of Modern Computing (0) | 2024.05.28 |
Linux: Iptable 방화벽 사용 방법 (0) | 2024.05.25 |