파일 검색 도구 정리: Ag, Ack & Grep
1. Ag (The Silver Searcher)
- 특징: 빠른 코드/텍스트 검색에 최적화, grep보다 속도 빠름
- 설치:
1
sudo apt install silversearcher-ag
- 기본 사용법:
1
ag [옵션] PATTERN [경로]
- 예제:
1
ag -i "hello world" .
- 주요 옵션:
| 옵션 | 설명 |
|---|---|
| -i | 대소문자 구분 없이 검색 |
| -w | 단어 단위 검색 |
| -Q | 정규식 사용 안함 (문자열 검색) |
| -C n | 검색 결과 전후 n줄 출력 |
| -A n | 검색 결과 뒤 n줄 출력 |
| -B n | 검색 결과 앞 n줄 출력 |
| -G | 파일 이름 패턴 검색 |
| -g | 파일 이름 패턴 검색 |
| -l | 검색된 파일 이름만 출력 |
| -L | 검색되지 않은 파일 이름만 출력 |
2. Ack
- 특징: Perl 기반, grep보다 코드 검색에 친화적, 기본적으로 특정 확장자 파일 제외 가능
- 설치:
1
sudo apt install ack
- 기본 사용법:
1
ack [옵션] PATTERN [경로]
- 예제:
1
ack -i "function_name" src/
- 주요 옵션:
| 옵션 | 설명 |
|---|---|
| -i | 대소문자 구분 없이 검색 |
| -w | 단어 단위 검색 |
| -Q | 정규식 사용 안함 |
| -C n | 검색 결과 전후 n줄 출력 |
| -A n | 검색 결과 뒤 n줄 출력 |
| -B n | 검색 결과 앞 n줄 출력 |
| -l | 검색된 파일 이름만 출력 |
| -L | 검색되지 않은 파일 이름만 출력 |
| –type=[type] | 특정 언어/파일 타입만 검색 |
3. grep
- 특징: 전통적인 텍스트 검색 도구, POSIX 정규식 기반
- 기본 사용법:
1
grep [옵션] PATTERN [파일명]
- 예제:
1
grep 'error' file.txt
- 자주 쓰는 옵션:
| 옵션 | 설명 |
|---|---|
| -c | 일치하는 행 수 출력 |
| -i | 대소문자 구분 없이 검색 |
| -v | 일치하지 않는 행만 출력 |
| -n | 행 번호와 함께 출력 |
| -l | 패턴이 포함된 파일 이름만 출력 |
| -w | 단어 단위 일치 |
| -x | 라인 전체와 일치 |
| -r | 하위 디렉토리 포함 검색 |
| -m N | 최대 검색 결과 제한 |
| -E | 확장 정규식 사용 |
| -F | 문자열 검색 (정규식 무시) |
- grep 종류:
| 명령어 | 설명 |
|---|---|
| grep | 기본 grep (POSIX 정규식) |
| egrep | grep -E / grep –extended-regexp (확장 정규표현식 사용) |
| fgrep | grep -F / grep –fixed-string (정규식 무시) |
4. Ag vs Ack vs Grep 비교
| 특징 | Ag | Ack | Grep |
|---|---|---|---|
| 속도 | 3~5배 빠름 | 2~3배 빠름 | 느림 |
| 정규식 | PCRE | Perl | POSIX |
| 기본 옵션 | -i, -w, -Q | -i, -w, -Q | -i, -w |
| 파일 이름 검색 | -G, -g | -G, -g | -r |
| 파일 이름 제외 | -L | -L | -r |
| 파일 이름만 출력 | -l | -l | -l |
5. 자주 쓰는 예
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 실시간 로그에서 특정 IP 검색
tail -f mylog.log | grep 192.168.15.86
# 특정 파일에서 여러 문자열 검색
grep 'Apple' mylog.txt | grep 'Banana'
# 결과를 파일로 저장
grep -n 'Apple' mylog.txt > result.txt
# ack로 특정 언어 파일에서 함수 검색
ack 'function_name' --type=python src/
# ag로 특정 문자열 빠르게 검색
ag -i "TODO" .
파일 검색 도구 선택 가이드: Ag vs Ack vs Grep
| 상황 / 용도 | Ag (The Silver Searcher) | Ack | Grep |
|---|---|---|---|
| 대규모 코드 검색 | ✅ 매우 빠름, .gitignore 자동 무시 | ⚪ 빠름, .gitignore 무시 가능 | ❌ 느림, 수동 옵션 필요 |
| 작은 텍스트/로그 파일 | ⚪ 사용 가능 | ⚪ 사용 가능 | ✅ 기본, 설치 불필요 |
| 시스템 환경 / 최소 환경 | ⚪ 설치 필요 | ⚪ 설치 필요 | ✅ 항상 있음 |
| 정규 표현식 활용 | ✅ PCRE 지원 | ✅ Perl 정규식 지원 | ✅ POSIX |
| 파일 타입 제한 검색 | ✅ --type 옵션, 특정 확장자 검색 | ✅ --type 옵션 | ⚪ 하위 디렉토리 + grep 명령 조합 필요 |
| 실시간 로그 검색 | ✅ tail -f + ag | ⚪ 가능하지만 느림 | ✅ tail -f + grep |
| 검색 결과 색상 하이라이트 | ✅ 기본 지원 | ✅ 기본 지원 | ⚪ -G 옵션 필요 |
| 설치 필요 여부 | 필요 (apt install silversearcher-ag) | 필요 (apt install ack) | 대부분 기본 설치됨 |
| 추천 환경 | 개발 환경, 코드 프로젝트, 대규모 저장소 | 코드 프로젝트, Perl 기반 환경 | 서버, 스크립트, 최소 환경 |
간단 결론
Ag: 요즘 개발자 기준 표준 선택
- 빠르고, 편리하며 대규모 코드 검색 최적화
.gitignore자동 무시, 파일 타입 지정, 색상 지원
Ack: 특별한 이유가 있거나 Perl 친화적 환경에서 사용
ag대비 조금 느림
Grep: 시스템 기본 도구
- 설치 필요 없음
- 작은 텍스트 파일, 로그, 서버 환경에서 안전하게 사용
This post is licensed under CC BY 4.0 by the author.