TL;DR
| Araç | Kullanım Alanı | Hız | AI Agent Uyumu |
|---|---|---|---|
| grep | Minimal ortamlar, basit boru hatları | Temel | Düşük (gürültülü çıktı) |
| ripgrep (rg) | Günlük geliştirme, büyük kod tabanları | 10x hızlı | Yüksek (tüm agent’lar kullanıyor) |
| ast-grep (sg) | Yapısal kod araması, refactoring | Hızlı | MCP entegrasyonu mevcut |
| mgrep | Semantic arama, doğal dil sorguları | Orta | 2x daha az token tüketimi |
Elinizin altında bulunmasında, komut satırı işlemlerinde işinizin kolaylıkla çözülebilmesinde oldukça yer sahibi olan bir komuttan bahsedeceğim; grep. Bu yazının ilk versiyonu 2019 yılında yayınlanmıştı. O tarihten bu yana geliştirici araçları ekosisteminde ve özellikle yapay zeka destekli geliştirme süreçlerinde önemli değişiklikler yaşandı. Bu güncelleme ile grep’in temellerinden başlayarak, ripgrep gibi modern alternatifleri, AI coding agent’ların bu araçları nasıl kullandığını ve yeni nesil semantic arama çözümlerini ele alacağım.
grep Temelleri
grep yani evrensel düzenli ifade yazıcısı (Global Regular Expression Printer), belirtilen örgü (pattern) bağlamında bir metin yığını içerisinden seçme ve işaretleme yapmamızı sağlar. Girilen şablon belirtilen yol içerisinde işlenir, şablona uygun sonuçlar işaretlenerek listelenir. Tek başına veya borularla (|, pipe) kullanılarak yetenekleri geliştirilebilir.
En yalın kullanımı:
grep '[aranacak-metin]' [dosya-yolu]
Sık Kullanılan Parametreler
| Parametre | Açıklama | Örnek |
|---|---|---|
-i | Büyük/küçük harf duyarsız | grep -i 'error' log.txt |
-r | Alt dizinlerde özyinelemeli arama | grep -r 'TODO' src/ |
-n | Satır numarası göster | grep -n 'function' app.js |
-v | Eşleşmeyenleri göster (hariç tutma) | grep -v 'debug' log.txt |
-l | Yalnızca dosya adlarını listele | grep -l 'import' *.ts |
-c | Eşleşme sayısını göster | grep -c 'error' log.txt |
-w | Tam kelime eşleştirme | grep -w 'return true' *.php |
-o | Yalnızca eşleşen kısmı göster | grep -o 'v[0-9]\+' changelog |
-A N | Eşleşme sonrası N satır | grep -A 3 'error' log.txt |
-B N | Eşleşme öncesi N satır | grep -B 2 'error' log.txt |
-C N | Eşleşme etrafında N satır | grep -C 5 'error' log.txt |
-E | Genişletilmiş regex | grep -E 'err(or|eur)' log.txt |
-F | Sabit string (regex yok) | grep -F '$variable' code.sh |
Boru Hattı (Pipe) Kullanımı
grep’in gücü, diğer komutlarla zincirlenmesinde ortaya çıkar:
# Çalışan süreçlerde nginx ara
ps aux | grep 'nginx'
# Log dosyasında 500 hatalarını sayfa sayfa görüntüle
grep '500' /var/log/access.log | more
# Belirli uzantıdaki dosyalarda izin bilgilerini kontrol et
ls -l ~/var/www/html/*.jpg | grep rwxrwxrwx
Birden fazla kelimeyi aramak için:
grep -i 'spam\|hashes' access_log.txt # yöntem 1
grep -iE 'spam|hashes' access_log.txt # yöntem 2
grep -i -e 'spam' -e 'hashes' access_log.txt # yöntem 3
GNU grep’in en güncel sürümü 3.12 (Nisan 2025) olup, 100.000’den fazla giriş içeren dizinlerde arama yapılamaması sorunu düzeltilmiştir.
Modern Alternatifler: Neden Yeni Araçlara İhtiyaç Duyuldu?
grep, Unix felsefesinin temel taşlarından biri olarak onlarca yıldır görevini yerine getirmekte. Ancak günümüzün devasa kod tabanları, çok çekirdekli işlemciler ve yapay zeka destekli geliştirme süreçleri yeni gereksinimleri beraberinde getirdi:
- Performans: grep tek çekirdek kullanır. Yüz binlerce dosya içeren projelerde bu yavaş kalmakta.
- Akıllı varsayılanlar:
node_modules,dist,.gitgibi dizinlerin manuel olarak hariç tutulması gerekmekte. - Unicode ve modern regex: Günümüz kod tabanlarında çoklu dil desteği ve gelişmiş regex gereksinimleri artmakta.
ripgrep (rg)
ripgrep, Andrew Gallant tarafından Rust dilinde geliştirilen ve grep’in modern alternatifi olarak konumlanan bir arama aracıdır1. GitHub’da 59.700’den fazla yıldıza sahip olan ripgrep, en güncel sürümü olan 15.1.0 (Ekim 2025) ile aktif geliştirme sürecini devam ettirmekte.
ripgrep’i öne çıkaran temel özellikler:
- Çok çekirdekli paralel arama: Arama işlemi CPU çekirdekleri arasında otomatik olarak dağıtılır
- Otomatik .gitignore desteği:
.gitignore,.ignoredosyalarını okuyaraknode_modules,buildgibi dizinleri varsayılan olarak atlar - Gelişmiş regex motoru: Sonlu otomat tabanlı, SIMD optimizasyonlu Rust regex motoru
- Unicode desteği: Tam Unicode karakter sınıfı desteği
- Jujutsu VCS tanıma: 15.0.0 sürümüyle birlikte Jujutsu versiyon kontrol sistemi deposu tanıma desteği
Performans Karşılaştırması
Linux kernel kaynak kodunda (4.640 dizin, 178 .gitignore dosyası) yapılan karşılaştırma2:
| İşlem | GNU grep | ripgrep | Fark |
|---|---|---|---|
| Basit örgü araması | ~0.67s | ~0.06s | 11x hızlı |
Satır numaralı arama (-n) | 9.48s | 1.66s | 5.7x hızlı |
Temel Kullanım
ripgrep’in komut satırı arayüzü, grep kullanıcıları için tanıdık gelmekte:
# Basit arama (varsayılan olarak özyinelemeli ve .gitignore uyumlu)
rg 'TODO'
# Dosya türü filtresi
rg --type ts 'interface'
rg --glob '*.tsx' 'useState'
# Sabit string araması (regex yok, daha hızlı)
rg -F '$variable'
# Bağlam ile arama
rg -C 3 'error'
# Yalnızca dosya adları
rg -l 'import.*lodash'
# Çoklu örgü
rg -e 'TODO' -e 'FIXME' -e 'HACK'
# JSON çıktı formatı (programatik kullanım için)
rg --json 'pattern'
Diğer Alternatifler
| Araç | Dil | Son Sürüm | GitHub Yıldızı | Durum |
|---|---|---|---|---|
| ripgrep (rg) | Rust | 15.1.0 (Ekim 2025) | 59.700+ | Aktif |
| ack | Perl | 3.9.0 (Mayıs 2025) | 799 | Aktif |
| ag (Silver Searcher) | C | 2.2.0 (Ağustos 2018) | 27.200+ | Bakımsız |
| ugrep | C++ | 7.5 (2025) | 3.000+ | Aktif |
| GNU grep | C | 3.12 (Nisan 2025) | N/A | Aktif (yavaş tempo) |
ack, Perl tabanlı bir arama aracı olarak aktif geliştirilmeye devam etmekte. 3.9.0 sürümüyle birlikte --and, --or, --not gibi Boolean arama operatörleri sunmakta; bu özellik grep ve ripgrep’te doğrudan bulunmamakta3.
ag (The Silver Searcher), grep’ten ripgrep’e giden yolda önemli bir ara adım olmuştur. Ancak 2018’den bu yana yeni bir sürüm yayınlanmamış olup bakımsız durumdadır.
ugrep, GNU grep ile tam uyumlu bir alternatif olarak öne çıkmakta. Etkileşimli TUI arayüzü, sıkıştırılmış dosyalarda (gz, bz2, xz, zstd) ve arşivlerde (zip, 7z, tar) arama yapabilme, PDF ve Word belgelerinde arama gibi benzersiz özellikleri sunmakta4.
AI Agent’lar ve Metin Arama
Yapay zeka destekli kodlama araçlarının yaygınlaşması, metin arama ekosisteminde yeni bir katman oluşturdu. Bir AI agent’ın bir kod tabanını “anlaması” için ilk adım, ilgili dosyaları ve kod parçacıklarını bulmaktır. “Bu fonksiyon nerede tanımlanmış?”, “Bu API anahtarı hangi dosyada kullanılıyor?” gibi soruların cevabını bulmak için metin arama araçları hayati öneme sahiptir.
Agent’lar Hangi Aracı Kullanıyor?
Tüm büyük AI coding agent’lar, dahili arama motoru olarak ripgrep kullanmakta:
| Agent | Arama Aracı | Kaynak |
|---|---|---|
| Claude Code | ripgrep (Grep tool) | GitHub issue #73’te doğrulandı5 |
| GitHub Copilot CLI | ripgrep (Kasım 2025’te dahil edildi) | GitHub Blog6 |
| OpenAI Codex | ripgrep (birincil), grep (yedek) | GitHub deposu7 |
| Aider | grep-ast (tree-sitter destekli) | GitHub deposu8 |
Claude Code’un Grep aracı, ripgrep’i üç farklı çıktı modunda kullanmakta: content (eşleşen satırlar), files_with_matches (dosya yolları) ve count (eşleşme sayıları). Bu modlar, agent’ın ihtiyacına göre çıktı miktarını kontrol etmekte.
AI Agent’ların Yaşadığı Sorunlar
1. Gürültülü Sonuçlar (Noise)
# Sorunlu: Tüm projede arama
grep -r 'config' .
# node_modules, dist, .next içinde binlerce gereksiz sonuç
Bu yaklaşım, agent’ın bağlamını kirletir ve token limitlerini hızla tüketir. ripgrep’in .gitignore desteği bu sorunu büyük ölçüde çözmekte; ancak yeterli olmadığı durumlar da bulunmakta.
2. Bağlam Eksikliği
grep yalnızca eşleşen satırı döndürür. -C parametresi ile çevre satırlar alınsa dahi, fonksiyonun veya sınıfın tamamını anlamak için yeterli olmayabilir. Aider’ın geliştirdiği grep-ast aracı, tree-sitter parser kullanarak eşleşen satırın ait olduğu fonksiyon, sınıf veya metodu bağlamıyla birlikte göstermekte8.
3. Regex Hataları
AI agent’lar bazen hatalı regex desenleri oluşturabilir. Özellikle ., *, (, ) gibi özel karakterlerin escape edilmesi konusunda tutarsızlıklar gözlemlenmekte. Bu nedenle kesin string araması gereken durumlarda -F (fixed string) parametresi tercih edilmelidir:
# Hatalı olabilecek regex yerine sabit string
rg -F 'interface{}' --type go
4. Token Tüketimi
OpenAI Codex deposundaki tartışmalarda belirtildiği üzere, “grep veya dosya adı sezgiselleri, çok dilli depolarda, yeniden adlandırılmış tanımlayıcılarda veya kavramların sorgudan farklı ifade edildiği durumlarda yetersiz kalmakta”7. Bu durum, semantic arama araçlarına olan ihtiyacı doğurmakta.
Çözümler ve En İyi Pratikler
Aramayı daraltmak: Tüm proje yerine belirli dizin ve dosya türleriyle sınırlamak:
# Tüm projede aramak yerine
rg 'handleSubmit' src/components/ --glob '*.tsx'
Sabit string araması: Regex gerektirmeyen durumlarda -F kullanmak:
rg -F 'process.env.DATABASE_URL'
Çıktı modunu seçmek: Önce dosya listesi, sonra içerik araması yaparak iki aşamalı ilerlemek:
# Önce hangi dosyalarda var?
rg -l 'useAuth'
# Sonra o dosyalarda detaylı ara
rg -C 3 'useAuth' src/hooks/useAuth.ts
Yeni Nesil Araçlar: Metin Aramanın Ötesi
2025-2026 döneminde metin arama ekosistemi üç katmanlı bir yapıya evrilmekte:
Katman 1: Kesin Metin Eşleştirme (grep, ripgrep)
Hızlı, güvenilir, yanlış pozitif üretmeyen klasik metin araması. Bilinen bir string veya regex desenini aramak için hala en doğru seçenek.
Katman 2: Yapısal Kod Araması (ast-grep)
ast-grep (sg), metin tabanlı arama yerine Abstract Syntax Tree (Soyut Sözdizim Ağacı) üzerinde yapısal arama gerçekleştirir9. tree-sitter parser kullanarak kodun yapısını anlamakta ve metin eşleştirmenin ötesinde sorgular çalıştırabilmekte:
# "console.log" çağrılarını bul (yalnızca fonksiyon çağrısı olarak, string içindekiler hariç)
sg -p 'console.log($$$)' --lang typescript
# try-catch bloğu olmayan async fonksiyonları bul
sg -p 'async function $NAME($$$) { $$$ }' --lang javascript
ast-grep, AI agent entegrasyonu için MCP (Model Context Protocol) sunucusu da sağlamakta. Bu sayede Claude Code veya Cursor gibi araçlar, yapısal kod araması yapabilmekte.
Katman 3: Semantic Arama (mgrep, grepai)
mgrep, Mixedbread AI tarafından geliştirilen ve yapay zeka embedding’leri ile çalışan bir semantic arama aracıdır10. Doğal dil sorguları ile kod, metin ve hatta PDF dosyalarında arama yapabilmekte:
# Doğal dil ile arama
mgrep "kullanıcı kimlik doğrulama akışı"
# Git deposunu otomatik indeksle
mgrep watch
mgrep ile Claude Code entegrasyonunda yapılan karşılaştırmalarda, mgrep tabanlı iş akışlarının grep tabanlı iş akışlarına göre yaklaşık 2 kat daha az token tükettiği raporlanmakta11.
grepai ise tamamen yerel çalışan bir semantic kod arama aracı olarak vektör embedding’leri kullanmakta. Doğal dil sorguları, kavramsal benzerlik araması ve çağrı grafiği izleme gibi özellikler sunmakta. Dahili MCP sunucusu ile AI agent entegrasyonu sağlamakta12.
Pratik Rehber: Hangi Durumda Hangi Araç?
| Senaryo | Önerilen Araç | Neden |
|---|---|---|
| Minimal sunucu, Docker imajı | grep | Ek kurulum gerektirmez |
| Basit boru hattı süzme | grep | ps aux | grep nginx |
| Günlük geliştirme araması | rg | Hız, .gitignore desteği |
| Büyük kod tabanı | rg | Paralel arama, akıllı filtreleme |
| AI agent komutu | rg | Tüm agent’lar destekliyor |
| Kod yapısı araması | ast-grep | AST tabanlı yapısal sorgular |
| Refactoring | ast-grep | Yapısal bul-değiştir |
| Kavramsal arama | mgrep / grepai | Doğal dil sorguları |
| Sıkıştırılmış dosya araması | ugrep | zip, gz, PDF desteği |
| Boolean kombinasyonlar | ack | --and, --or, --not |
Kurulum
# ripgrep
brew install ripgrep # macOS
apt install ripgrep # Debian/Ubuntu
choco install ripgrep # Windows
# ast-grep
npm install -g @ast-grep/cli
brew install ast-grep
# mgrep
pip install mgrep
# ugrep
brew install ugrep
Sonuç
grep, Unix felsefesinin temel taşlarından biri olarak değerini korumakta. Ancak modern geliştirme iş akışlarında ripgrep’in hız ve akıllı varsayılan davranışları, onu neredeyse her senaryoda daha iyi bir seçenek haline getirmekte. AI coding agent’ların yaygınlaşmasıyla birlikte metin arama araçlarının verimli kullanımı, hem insanlar hem de yapay zeka ajanları için kritik bir beceri haline geldi.
Metin arama ekosistemi, kesin eşleştirme (ripgrep), yapısal arama (ast-grep) ve semantic arama (mgrep) olmak üzere üç katmanlı bir yapıya evrilmekte. Bu katmanların her biri, farklı bir ihtiyaca yanıt vermekte ve birbirini tamamlamakta.
Bu yazıyı hazırlarken AI agent’ların arama operasyonlarında yaşadığı sorunları daha yakından inceledim: built-in grep araçlarındaki false negative’ler, context window’u tüketen gürültülü sonuçlar, hallucinate edilen dosya yolları. Bu sorunların her biri tek başına sinir bozucu; bir araya geldiklerinde ise agent’ın ürettiği kodun kalitesini doğrudan etkileyen bir domino etkisi yaratıyor. Bir sonraki yazıda bu problemleri detaylıca ele aldım ve çözüm olarak geliştirdiğim local semantic code search MCP sunucusunu paylaştım.
Footnotes
- ripgrep GitHub Repository ↩
- ripgrep is faster than grep, ag, git grep, ucg, pt, sift ↩
- ack: Beyond grep ↩
- ugrep: Ultra fast grep ↩
- Claude Code - ripgrep confirmation ↩
- GitHub Copilot CLI Changelog, November 2025 ↩
- OpenAI Codex - Semantic Search Proposal ↩ ↩2
- Aider grep-ast ↩ ↩2
- ast-grep: Structural Code Search ↩
- mgrep: Semantic grep by Mixedbread AI ↩
- Boosting Claude: Faster Code Analysis with mgrep ↩
- grepai: Local Semantic Code Search ↩