본문 바로가기
C.W.K.
Stream
Lesson 07 of 10 · published

grep과 ripgrep

~10 min · grep, ripgrep, shell

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

터미널에서는 greprg를 가장 자주 만나

grep은 오래된 표준 검색 도구고, ripgreprg는 코드 저장소를 재귀 검색하기 편한 현대적인 도구야. rg는 Rust regex 엔진을 기본으로 사용하고 .gitignore도 자동으로 존중해.

grep은 선택한 모드에 따라 문법이 달라져

  • 기본 BRE: ?, +, 중괄호, 괄호, |를 특별한 문법으로 쓰려면 이스케이프가 필요해.
  • ERE: grep -E를 사용하면 괄호와 선택 같은 문법을 이스케이프 없이 쓸 수 있어.
  • PCRE: 지원되는 빌드에서 grep -P를 사용하면 전후방 탐색, 역참조, 이름 붙은 그룹 같은 기능을 쓸 수 있어.

이식하기 쉬운 일반 검색은 grep -E로 시작하고, PCRE 기능이 꼭 필요할 때만 -P의 지원 여부를 확인해.

rg의 기본 엔진은 기능을 제한해 시간을 예측하기 쉽게 해

기본 Rust regex 엔진은 전후방 탐색과 역참조를 지원하지 않는 대신 입력 길이에 대해 선형 시간 동작을 보장해. 그런 기능이 필요한 검색만 --pcre2로 별도 엔진을 선택할 수 있어.

  • rg pattern은 현재 디렉터리 아래를 재귀 검색하고
  • -i는 대소문자를 무시하고, -n은 줄 번호를 보여 주고, -l은 파일 이름만 보여 줘.
  • -A 3은 매칭 뒤 세 줄을 함께 보여 주고
  • --pcre2는 PCRE2 문법을 사용하고
  • -r 'replacement'$1 같은 캡처를 이용한 치환 결과를 출력해.

Code

grep과 ripgrep·bash
# POSIX grep BRE — escape 필요
grep 'foo\(bar\)' file.txt

# grep ERE — 현대
grep -E 'foo(bar)' file.txt

# grep PCRE — 풀 기능 (가능할 때)
grep -P '(?<=user_)\w+' file.txt

# ripgrep — 기본 재귀, .gitignore 존중
rg 'TODO|FIXME' .

# ripgrep + 줄 번호 + case insensitive
rg -ni 'error' logs/

# ripgrep + lookaround 위한 PCRE
rg --pcre2 '(?<=password = )\S+' config/

# 치환 미리보기
rg -r 'NEW: $1' '(\d+)' file.txt

# 패턴 포함 파일 찾기
rg -l 're.compile' .

# 특정 파일 타입만 검색
rg -t py 'import re' .

External links

Exercise

코드 프로젝트에서 rg 'TODO' .를 실행하고, 이어서 rg -t py 'import re' .로 정규식을 사용하는 Python 파일을 찾아. 같은 검색을 grep -r로도 실행해서 재귀 검색, 파일 형식 제한, 무시 파일 처리의 차이를 비교해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.