728x90
반응형
Linux Bash 스크립트에서 강력한 텍스트 검색 및 처리 도구로 grep
을 빼놓을 수 없습니다. 이 글에서는 정규표현식(Regular Expression)과 함께 grep
을 활용하는 방법을 자세히 다룹니다. 정규표현식은 패턴 매칭을 위한 강력한 도구이며, grep
은 파일 또는 문자열에서 이러한 패턴을 찾아주는 명령어입니다.
1. 정규표현식이란?
정규표현식은 텍스트에서 특정 패턴을 매칭하는 데 사용됩니다. 다음은 정규표현식의 기본 구성 요소입니다:
1.1. 기초 패턴
패턴 | 설명 |
---|---|
. |
임의의 한 문자 |
^ |
문자열의 시작 |
$ |
문자열의 끝 |
* |
앞 문자가 0번 이상 반복 |
+ |
앞 문자가 1번 이상 반복 |
? |
앞 문자가 0번 또는 1번 등장 |
[ ] |
문자 클래스 |
` | ` |
() |
그룹화 |
1.2. 예제
^Hello
: 문자열이Hello
로 시작하는 경우world$
: 문자열이world
로 끝나는 경우h.t
:h
와t
사이에 어떤 문자든 하나 존재하는 경우[abc]
:a
,b
, 또는c
중 하나가 매칭되는 경우\d
: 숫자 (0-9)에 매칭
2. grep 소개
grep
은 Global Regular Expression Print의 약자로, 파일 또는 입력된 문자열에서 패턴을 검색하는 데 사용됩니다. 기본 사용법은 다음과 같습니다:
grep [옵션] "패턴" [파일명]
2.1. 주요 옵션
옵션 | 설명 |
---|---|
-i |
대소문자 구분 없이 검색 |
-v |
패턴과 일치하지 않는 행 출력 |
-c |
매칭된 행의 개수 출력 |
-n |
매칭된 행의 줄 번호 출력 |
-r |
디렉토리 내 모든 파일을 재귀적으로 검색 |
-E |
확장 정규표현식(Extended Regex) 사용 |
-o |
매칭된 패턴만 출력 |
3. 실습: 정규표현식과 grep 사용 예제
3.1. 간단한 문자열 검색
# sample.txt 내용:
# Hello World
# This is a test file.
# Regex is powerful.
# "test"라는 단어가 포함된 줄을 검색
grep "test" sample.txt
출력:
This is a test file.
3.2. 대소문자 구분 없이 검색
# "hello"를 대소문자 구분 없이 검색
grep -i "hello" sample.txt
출력:
Hello World
3.3. 숫자가 포함된 줄 찾기
# 숫자가 포함된 줄 검색
grep "[0-9]" sample.txt
3.4. 정규표현식 확장: 이메일 주소 검색
# 파일 내 이메일 주소 검색
# emails.txt 내용:
# user1@example.com
# contact@domain.org
# invalid-email@domain
grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" emails.txt
출력:
user1@example.com
contact@domain.org
3.5. 특정 단어가 없는 줄 찾기
# "powerful"이 포함되지 않은 줄 검색
grep -v "powerful" sample.txt
3.6. 재귀적으로 파일 검색
# 현재 디렉토리와 하위 디렉토리에서 "error" 검색
grep -r "error" .
4. 고급 사용법: Bash 스크립트에서 활용하기
4.1. 로그 파일에서 특정 패턴 필터링
#!/bin/bash
# 로그 파일에서 "ERROR"로 시작하는 행 추출
grep "^ERROR" /var/log/syslog > error_logs.txt
echo "추출된 오류 로그는 error_logs.txt에 저장되었습니다."
4.2. 사용자 입력으로 검색
#!/bin/bash
read -p "검색할 패턴을 입력하세요: " pattern
read -p "검색할 파일명을 입력하세요: " filename
grep "$pattern" "$filename"
4.3. 정규표현식으로 텍스트 파일 처리
#!/bin/bash
# 전화번호 형식 검사
while read -r line; do
if [[ $line =~ ^[0-9]{3}-[0-9]{3}-[0-9]{4}$ ]]; then
echo "유효한 전화번호: $line"
else
echo "잘못된 형식: $line"
fi
done < phone_numbers.txt
5. 마무리
정규표현식과 grep
은 텍스트 데이터 처리에서 필수적인 도구입니다. 이 글에서 다룬 기본 문법과 명령어를 익힌 후, 실습을 통해 더 복잡한 정규표현식과 사용 사례에 도전해 보세요. grep
을 활용한 효율적인 데이터 검색은 Linux 환경에서 작업 생산성을 크게 향상시킬 것입니다.
반응형
'Linux Bash shell script' 카테고리의 다른 글
Bash Shell Script 실행 속도 최적화 (0) | 2025.02.07 |
---|---|
awk와 sed를 활용한 데이터 처리 (0) | 2025.02.06 |
Bash Shell Script 로그 파일 작성 및 분석 (0) | 2025.02.04 |
Bash 디버깅 옵션: `set -x`와 `set -e` 사용법 (0) | 2025.02.03 |
Bash Shell Script 파이프라인(Pipeline)을 활용한 명령어 조합 (0) | 2025.02.02 |