실전 패턴 모음
이론을 배웠으니 바로 쓸 수 있는 패턴을 모아봤습니다. 실무에서 자주 마주치는 형식들입니다. 처음부터 암기할 필요는 없습니다. 필요할 때 찾아서 쓰다 보면 자연스럽게 익혀집니다.
패턴 작성 팁은 하나입니다. 단순한 것부터 시작해서 점진적으로 정교하게 만드세요. 완벽한 패턴을 처음부터 쓰려 하면 막힙니다.
자주 쓰는 패턴 레시피
이메일 주소
| 수준 | 패턴 | 설명 |
|---|---|---|
| 간단 | [^@]+@[^@]+ |
@ 앞뒤에 뭔가 있는 것 |
| 보통 | [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} |
일반적인 이메일 형식 |
cat > /tmp/contacts.txt << 'EOF'이름: 김철수, 이메일: [email protected]이름: 이영희, 이메일: [email protected]이름: 박민준, 이메일: invalid-email이름: 최수진, 이메일: [email protected]이름: 잘못된, 이메일: @nodomain.comEOFgrep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" /tmp/contacts.txt
이름: 김철수, 이메일: [email protected]
이름: 이영희, 이메일: [email protected]
이름: 최수진, 이메일: [email protected]
IP 주소
| 수준 | 패턴 | 설명 |
|---|---|---|
| 간단 | [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ |
숫자.숫자.숫자.숫자 |
| 보통 | [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} |
각 옥텟 1~3자리 |
cat > /tmp/network.txt << 'EOF'서버 A: 192.168.1.100서버 B: 10.0.0.5잘못된 주소: 999.999.999.999게이트웨이: 192.168.1.1텍스트만: 서버없음EOFgrep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" /tmp/network.txt
서버 A: 192.168.1.100
서버 B: 10.0.0.5
잘못된 주소: 999.999.999.999
게이트웨이: 192.168.1.1
999.999.999.999도 형식은 맞습니다. 실제 유효 범위(0~255) 검증은 정규표현식만으로는 복잡하므로 스크립트 로직으로 추가 검증합니다.
전화번호 (한국)
| 형식 | 패턴 |
|---|---|
| 010-1234-5678 | 010-[0-9]{4}-[0-9]{4} |
| 010 또는 011 계열 | 01[0-9]-[0-9]{3,4}-[0-9]{4} |
| 지역번호 포함 | 0[0-9]{1,2}-[0-9]{3,4}-[0-9]{4} |
cat > /tmp/phones.txt << 'EOF'김철수: 010-1234-5678이영희: 02-345-6789박민준: 031-456-7890최수진: 010-9876-5432잘못된: 12-3456-789EOFgrep -E "0[0-9]{1,2}-[0-9]{3,4}-[0-9]{4}" /tmp/phones.txt
김철수: 010-1234-5678
이영희: 02-345-6789
박민준: 031-456-7890
최수진: 010-9876-5432
날짜 (YYYY-MM-DD)
| 패턴 | 설명 |
|---|---|
[0-9]{4}-[0-9]{2}-[0-9]{2} |
기본 날짜 형식 |
20[0-9]{2}-[0-9]{2}-[0-9]{2} |
2000년대 날짜 |
grep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}" /tmp/fixed.log
2026-04-24 09:01:00 서버 시작
2026-04-24 09:05:30 요청 처리 시작
2026-04-24 09:10:15 오류 발생
2026-04-24 09:15:00 서버 종료
URL
| 패턴 | 설명 |
|---|---|
https?://[^[:space:]]+ |
http 또는 https URL |
cat > /tmp/urls.txt << 'EOF'공식 사이트: https://www.example.comAPI 주소: http://api.example.com/v1/users깃허브: https://github.com/user/repo잘못된: ftp://old-protocol.com텍스트만: 주소없음EOFgrep -E "https?://[^[:space:]]+" /tmp/urls.txt
공식 사이트: https://www.example.com
API 주소: http://api.example.com/v1/users
깃허브: https://github.com/user/repo
ftp는 https?에 매칭되지 않으므로 제외됩니다.
기타 자주 쓰는 패턴
| 용도 | 패턴 | grep 명령 예시 |
|---|---|---|
| 숫자만으로 구성된 줄 | ^[0-9]+$ |
grep -E "^[0-9]+$" file |
| 공백 줄 | ^[[:space:]]*$ |
grep -E "^[[:space:]]*$" file |
| 빈 줄 | ^$ |
grep "^$" file |
| 주석 줄 (# 시작) | ^[[:space:]]*# |
grep -E "^[[:space:]]*#" file |
| 주석과 빈 줄 제외 | ^[^#] + -v "^$" |
grep -v "^#" file | grep -v "^$" |
| 파일 경로 (절대) | ^/[^[:space:]]+ |
grep -E "^/[^ ]+" file |
| 16진수 색상 | #[0-9a-fA-F]{6} |
grep -E "#[0-9a-fA-F]{6}" file |
주석과 빈 줄 제외 — 설정 파일 보기
실무에서 아주 자주 씁니다. 설정 파일은 주석이 많아서 실제 설정이 몇 개 없는지 보기 어렵습니다.
# /etc/ssh/sshd_config 실제 설정만 보기 (주석, 빈 줄 제외)grep -v "^[[:space:]]*#" /etc/ssh/sshd_config | grep -v "^[[:space:]]*$"
또는 한 번에 처리합니다.
grep -E "^[^#[:space:]]" /etc/ssh/sshd_config
패턴 작성 팁
처음부터 완벽한 패턴을 쓰려 하면 막힙니다. 단계별로 발전시키는 방식이 효과적입니다.
이메일 패턴 발전 과정.
# 1단계: @ 기호만 있으면 됨grep "@" /tmp/contacts.txt# 2단계: @ 앞뒤에 뭔가 있어야 함grep -E ".+@.+" /tmp/contacts.txt# 3단계: @ 앞은 이메일에 허용된 문자들grep -E "[a-zA-Z0-9._%+-]+@.+" /tmp/contacts.txt# 4단계: @ 뒤도 도메인 형식이어야 함grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" /tmp/contacts.txt
각 단계마다 실제 데이터로 테스트하면서 패턴을 보완합니다. 단계 3에서 잘못된 이메일이 잡힌다면 단계 4로 넘어갑니다.
테스트 도구 활용.
패턴을 만들 때 echo와 grep을 조합해 빠르게 테스트합니다.
# 패턴이 맞는지 빠른 테스트echo "[email protected]" | grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"echo "invalid-email" | grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
첫 번째 echo는 매칭되어 출력되고, 두 번째는 출력이 없습니다. 이 방식으로 패턴이 올바른지 즉시 확인합니다.