# 1. 특정 단어가 포함된 줄 찾기
grep 'error' /var/log/syslog
# 2. 대소문자 구분 없이 찾기
grep -i 'error' /var/log/syslog
# 3. 특정 단어로 시작하는 줄
grep '^root' /etc/passwd
# 4. 특정 단어로 끝나는 줄
grep 'bash$' /etc/passwd
# 5. 빈 줄 찾기
grep '^$' file.txt
# 6. 빈 줄이 아닌 줄만 출력
grep -v '^$' file.txt
# 7. 숫자로만 이루어진 줄 찾기
grep -E '^[0-9]+$' file.txt
# 8. IP 주소 형태 찾기 (간단 버전)
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' file.txt
# 9. 이메일 형태 찾기
grep -E '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}' file.txt
# 10. 여러 단어 중 하나라도 포함된 줄 (OR)
grep -E 'error|fail|warn' /var/log/syslog
# 11. 특정 확장자 파일명 찾기
ls | grep -E '\.(jpg|png|gif)$'
# 12. 줄 번호와 함께 출력
grep -n 'error' file.txt
# 13. 매치된 개수만 세기
grep -c 'error' file.txt
# 14. 매치되지 않는 줄만 출력
grep -v 'error' file.txt
# 15. 여러 파일에서 검색 (파일명 함께 출력)
grep -r 'TODO' ./src/
7. sed 실전 예시 (치환/삭제)
# 1. 특정 문자열을 다른 문자열로 치환 (첫 번째만)
sed 's/foo/bar/' file.txt
# 2. 줄 전체에서 모든 매치 치환
sed 's/foo/bar/g' file.txt
# 3. 파일을 직접 수정 (원본 백업 생성)
sed -i.bak 's/foo/bar/g' file.txt
# 4. 특정 줄 범위에서만 치환 (1~10번째 줄)
sed '1,10s/foo/bar/g' file.txt
# 5. 특정 패턴이 있는 줄 삭제
sed '/^#/d' file.txt # 주석(#으로 시작하는 줄) 삭제
# 6. 빈 줄 삭제
sed '/^$/d' file.txt
# 7. 특정 줄 번호 삭제
sed '3d' file.txt # 3번째 줄 삭제
sed '3,5d' file.txt # 3~5번째 줄 삭제
# 8. 대소문자 구분 없이 치환
sed 's/error/ERROR/gi' file.txt
# 9. 정규식 그룹을 이용한 치환 (날짜 형식 변경: YYYY-MM-DD → DD/MM/YYYY)
sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/' file.txt
# 10. 특정 문자열이 포함된 줄만 출력 (grep처럼 사용)
sed -n '/error/p' file.txt
8. awk 실전 예시
# 1. 특정 패턴이 포함된 줄 출력
awk '/error/' file.txt
# 2. 정규식으로 특정 필드 조건 검사
awk '$1 ~ /^root/' /etc/passwd
# 3. 필드 구분자 지정 후 정규식 매치
awk -F: '$1 ~ /^root/ {print $1, $3}' /etc/passwd
9. 자주 쓰는 정규식 패턴 모음
목적
패턴 (ERE 기준)
숫자만
^[0-9]+$
영문자만
^[A-Za-z]+$
영문+숫자만
^[A-Za-z0-9]+$
공백 제거 확인(앞뒤 공백 없는 줄)
^[^ ].*[^ ]$
전화번호(010-1234-5678)
^01[0-9]-[0-9]{3,4}-[0-9]{4}$
이메일
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
IPv4 주소(간단)
^([0-9]{1,3}\.){3}[0-9]{1,3}$
날짜(YYYY-MM-DD)
^[0-9]{4}-[0-9]{2}-[0-9]{2}$
URL(http/https)
^https?://[A-Za-z0-9.-]+(/[^ ]*)?$
주석 줄(#으로 시작)
^#
빈 줄
^$
여러 개의 공백을 하나로
sed -E 's/ +/ /g'
10. BRE와 ERE 비교 정리
목적
BRE (grep, sed 기본)
ERE (grep -E, egrep)
그룹핑
\( \)
( )
반복(1회 이상)
\+
+
선택(0 또는 1회)
\?
?
OR
| (GNU 확장)
|
반복 횟수 지정
\{n,m\}
{n,m}
팁: 헷갈릴 때는 grep -E(또는 egrep)를 사용하면 백슬래시 없이 직관적으로 작성할 수 있습니다.
.은 정규식에서 임의의 한 문자이므로, 실제 점(.)을 찾으려면 \.로 이스케이프해야 합니다.
grep은 기본적으로 줄 단위로 매치합니다. 여러 줄에 걸친 패턴은 grep -Pzo 또는 awk, perl을 활용해야 합니다.
정규식은 도구(grep/sed/awk/vi)마다 지원 범위가 조금씩 다르므로, 헷갈리면 -E(확장 정규식) 옵션 사용을 우선 고려하세요.
12. 명령어별 빠른 참고
grep -E 'pattern' file # 확장 정규식으로 검색
grep -P 'pattern' file # PCRE로 검색 (\d, \w 등 사용 가능)
sed -E 's/pattern/repl/g' file # 확장 정규식으로 치환
sed -n '/pattern/p' file # 패턴이 있는 줄만 출력 (grep 대용)