리눅스 터미널에서 파일을 읽는 법(cat, more)을 익히고 나면, 곧바로 다음 장벽에 부딪힙니다. "내용이 너무 많은데, 내가 원하는 '에러 메시지'는 도대체 어디 있는 거지?"라는 의문이죠. 윈도우 탐색기에서 Ctrl + F를 누르듯, 리눅스에는 수천 줄의 텍스트 중 원하는 단어만 쏙 골라내는 강력한 필터, **grep**이 있습니다.
오늘은 제가 실제 프로젝트를 진행하며 '에러 찾기 삽질'을 획기적으로 줄여주었던 grep 사용기를 공유합니다.
1. 나의 경험담: "모래사장에서 바늘 찾기"
Flutter로 만든 앱을 리눅스 서버와 연동 테스트하던 중이었습니다. 서버 로그 파일(server.log)은 실시간으로 수백 줄씩 쌓이고 있었고, 특정 사용자의 로그인 실패 원인을 찾아야 했죠.
처음에는 지난 시간에 배운 more를 사용해 눈이 빠져라 스크롤을 내렸습니다. 하지만 수만 줄의 텍스트 사이에서 "Login Failed"라는 문구를 찾는 건 그야말로 모래사장에서 바늘 찾기였죠. 그때 선배 개발자가 툭 던진 한마디, "그냥 grep 써봐." 그날 이후 제 리눅스 라이프는 grep을 알기 전과 후로 나뉘게 되었습니다.
2. grep: 필요한 것만 남기는 거름망
grep은 'Global Regular Expression Print'의 약자입니다. 쉽게 말해 **"파일 안에서 특정 패턴(단어)을 찾아 그 줄만 출력해줘"**라는 뜻입니다.
실험 코드: 기초적인 단어 찾기
# 1. 실험용 로그 파일 생성
echo "2026-01-27: System Start" > test.log
echo "2026-01-27: User 'sunyjini' login success" >> test.log
echo "2026-01-27: ERROR - Database connection failed" >> test.log
echo "2026-01-27: User 'guest' login success" >> test.log
# 2. 'ERROR'가 포함된 줄만 찾기
grep "ERROR" test.log
(▲ 실행 결과: 전체 파일 내용 중 'ERROR'라는 단어가 포함된 줄만 빨간색으로 강조되어 나타납니다. 다른 불필요한 정보들은 모두 걸러집니다.)
3. 실전에서 200% 활용하는 주요 옵션
grep은 옵션과 함께 쓸 때 진가를 발휘합니다. 제가 가장 자주 쓰는 3가지를 소개합니다.
① 대소문자 구분 없이 찾기 (-i)
서버 로그는 Error, error, ERROR 등 대소문자가 제각각일 때가 많습니다. 이때 -i (ignore case) 옵션을 쓰면 모든 케이스를 다 잡아냅니다.
grep -i "error" test.log
② 몇 번째 줄인지 확인하기 (-n)
찾은 내용이 파일의 몇 번째 줄에 있는지 알면 에디터로 수정할 때 편리합니다.
grep -n "ERROR" test.log
③ 여러 파일에서 동시에 찾기 (-r)
현재 폴더의 모든 파일과 하위 폴더까지 뒤져서 단어를 찾고 싶을 때 사용합니다.
# 현재 폴더(.) 이하 모든 곳에서 "API_KEY"를 찾아라!
grep -r "API_KEY" .
4. 핵심 기술: 파이프(|)와 grep의 조합
리눅스의 진정한 매력은 명령어들을 연결하는 데 있습니다. 지난 시간에 배운 cat과 조합하면 파일 내용을 화면에 쏟아내는 동시에 필터링을 할 수 있습니다.
조합 코드:
# 파일을 읽어서(cat), 그 결과를 grep에게 넘겨라(|)
cat test.log | grep -i "login"
이 방식은 특히 실시간으로 쌓이는 로그를 감시할 때(tail -f server.log | grep "error") 환상적인 위력을 발휘합니다.
5. 실험 요약 및 인사이트
이번 실험을 통해 정리한 grep 활용표입니다.
| 상황 | 명령어 조합 | 비고 |
| 특정 단어 검색 | grep "단어" 파일명 | 가장 기본 |
| 대소문자 무시 | grep -i "단어" 파일명 | 실무 필수 옵션 |
| 줄 번호 표시 | grep -n "단어" 파일명 | 디버깅 시 유용 |
| 폴더 전체 검색 | grep -r "단어" 경로 | 프로젝트 전체 탐색 |
6. 마치며: 검색이 빨라지면 개발이 즐겁다
grep을 익히고 나니 로그 파일을 보는 두려움이 사라졌습니다. 방대한 데이터 속에서 내가 원하는 정보만 낚아올리는 짜릿함은 리눅스 터미널이 주는 큰 선물 중 하나입니다.
오늘의 한 줄 평: "grep은 내 눈을 대신해 수만 줄의 코드를 읽어주는 가장 성실한 조수다."
이렇게 파일 안의 '내용'을 찾는 법을 알았다면, 이제는 엉뚱한 곳에 숨어있는 '파일' 자체를 찾아내는 법이 궁금해지실 겁니다. 다음 시간에는 리눅스의 강력한 추적기, find 명령어에 대해 다뤄보겠습니다.
'IT' 카테고리의 다른 글
| [리눅스 기초 #9] 이삿짐 싸기의 달인: tar와 zip으로 대용량 프로젝트 압축하기 (0) | 2026.01.27 |
|---|---|
| [리눅스 기초 #8] "내 소스 코드 어디 갔니?" : find 명령어로 미로 속 보물 찾기 (1) | 2026.01.27 |
| [리눅스 기초 #6] 터미널에서 파일 읽기: cat으로 쏟아내고 more로 끊어보기 (0) | 2026.01.26 |
| [리눅스 기초 #5] "내 집인데 왜 못 들어가?" : chown으로 파일 소유권 되찾기 (0) | 2026.01.26 |
| [리눅스 기초 #4] "Permission Denied"라는 벽을 넘다: chmod로 잠긴 권한의 문 열기 (0) | 2026.01.26 |