우분투 grep 명령어 완벽 가이드 - 텍스트 검색부터 실무 로그 분석까지 한 번에 끝내기!

개요

리눅스 환경에서 대용량 텍스트 파일이나 시스템 로그를 분석할 때 grep 명령어는 필수 도구입니다. 본 글에서는 Ubuntu 터미널에서 grep을 실행하여 원하는 문자열을 신속하게 찾고, 출력 결과를 정확하게 해석하는 실무 핵심 기법을 살펴봅니다.

기본 문자열 검색과 대소문자 무시 옵션(-i)

grep 명령어 실습을 위한 독립된 작업 공간을 만들고 이동하기 위해 mkdir -p ~/grep_demo && cd ~/grep_demo 명령어를 실행합니다.

mkdir -p ~/grep_demo && cd ~/grep_demo

검색 테스트에 사용할 예제 문자열을 포함한 텍스트 파일을 생성하기 위해 echo -e 'Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux' > sample.txt 명령어를 실행합니다.

echo -e ‘Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux’ > sample.txt

grep 명령어는 파일이나 텍스트에서 특정 패턴 또는 문자열을 검색하여 일치하는 행을 출력합니다.
기본 상태에서는 영문 대소문자를 엄격히 구분하므로 Ubuntu가 정확히 일치하는 행만 검색됩니다.
⚙️ [주요 옵션]

-i : 대소문자 구분을 무시하고 일치하는 패턴을 검색합니다.
-v : 지정한 패턴과 일치하지 않는 행만 반전하여 출력합니다.
-n : 일치하는 내용이 포함된 줄 번호를 함께 표시합니다.
-c : 일치하는 행의 전체 개수만 카운트하여 출력합니다.
-r : 하위 디렉터리 내의 모든 파일을 재귀적으로 탐색합니다.
-l : 일치하는 내용이 있는 파일의 이름만 나열합니다.
-E : 확장 정규 표현식(ERE)을 사용하여 검색합니다.

grep ‘Ubuntu’ sample.txt

-i 옵션을 추가하면 대소문자를 구분하지 않고 검색합니다.
따라서 대문자로 시작하는 Ubuntu와 소문자로 시작하는 ubuntu가 포함된 행이 모두 출력됩니다.

grep -i ‘ubuntu’ sample.txt

행 번호 표시(-n)와 일치하지 않는 행 반전 검색(-v)

로그 분석 실습에 사용할 가상 로그 데이터를 생성하기 위해 echo -e 'INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full' > app.log 명령어를 실행합니다.

echo -e ‘INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full’ > app.log

-n 옵션을 사용하면 검색 패턴과 일치하는 행의 줄 번호를 함께 표시합니다.
ERROR 문자열이 포함된 줄 번호와 내용이 함께 출력되어 문제 발생 위치를 빠르게 파악할 수 있습니다.

grep -n ‘ERROR’ app.log

-v 옵션을 사용하면 지정한 패턴과 일치하지 않는 행만 반전하여 출력합니다.
정상 상태를 나타내는 INFO 항목을 제외하고 오류 관련 행만 선별하여 확인할 수 있습니다.

grep -v ‘INFO’ app.log

하위 디렉터리 재귀 검색(-r)과 파일 이름만 출력(-l)

재귀 검색 실습을 위해 하위 보관 디렉터리 구조를 생성하고자 mkdir -p ~/grep_demo/logs/archive 명령어를 실행합니다.

mkdir -p ~/grep_demo/logs/archive

검색 테스트에 사용할 데이터베이스 오류 로그 파일을 생성하기 위해 echo 'database error' > ~/grep_demo/logs/db.log 명령어를 실행합니다.

echo ‘database error’ > ~/grep_demo/logs/db.log

정상 로그 확인용 캐시 로그 파일을 생성하기 위해 echo 'cache hit' > ~/grep_demo/logs/cache.log 명령어를 실행합니다.

echo ‘cache hit’ > ~/grep_demo/logs/cache.log

하위 디렉터리 탐색 테스트를 위해 과거 오류 로그 파일을 생성하고자 echo 'fatal error occurred' > ~/grep_demo/logs/archive/old.log 명령어를 실행합니다.

echo ‘fatal error occurred’ > ~/grep_demo/logs/archive/old.log

-r 옵션과 -n 옵션을 함께 사용하면 하위 디렉터리까지 재귀적으로 탐색하면서 일치하는 행의 줄 번호를 함께 표시합니다.
logs 디렉터리와 하위 archive 디렉터리에 위치한 파일들에서 error 문자열이 포함된 파일 경로와 행 번호, 내용이 모두 출력됩니다.

grep -rn ’error’ ~/grep_demo/logs

-l 옵션을 추가하여 -rl 형태로 실행하면 일치하는 내용 대신 해당 패턴이 포함된 파일의 경로 목록만 출력합니다.
수많은 로그 파일 중 error가 발생한 파일만 빠르게 선별하여 확인할 때 유용합니다.

grep -rl ’error’ ~/grep_demo/logs

검색 결과 주변 문맥 확인(-A, -B, -C) 및 컬러 하이라이트

단계별 프로세스 진행 상황과 오류 문맥 확인 실습을 위해 샘플 로그 파일을 생성하고자 echo -e 'Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit' > process.log 명령어를 실행합니다.

echo -e ‘Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit’ > process.log

-B 옵션과 -A 옵션을 사용하면 일치하는 행을 기준으로 이전(Before)과 이후(After) 행을 지정한 개수만큼 함께 출력합니다.
--color=always 옵션으로 일치한 Critical Failure 단어를 색상으로 강조하면서, 이전 1개 행과 이후 2개 행을 함께 확인하여 오류 발생 전후의 작업 흐름을 파악할 수 있습니다.

grep –color=always -B 1 -A 2 ‘Critical Failure’ process.log

-C 옵션을 사용하면 일치하는 행을 기준으로 앞뒤(Context) 양방향의 행을 동일한 개수만큼 한 번에 출력합니다.
Critical Failure가 포함된 줄의 직전 1개 행과 직후 1개 행이 동시에 표시되어 핵심 문맥을 더욱 간결하게 확인할 수 있습니다.

grep –color=always -C 1 ‘Critical Failure’ process.log

지금까지 우분투 환경에서 grep 명령어의 기본 검색 옵션부터 실무 로그 분석 활용법까지 핵심 내용을 정리해보았습니다.
오늘 익힌 패턴들을 실제 터미널 작업에 적극 활용해 보시면서 업무 효율을 한 단계 높여보시기 바랍니다.