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?
AI coding agent’lar, dahili arama motoru olarak büyük ölçüde ripgrep kullanmakta; ancak Claude Code 2026 Nisan’da native build’lerde ripgrep yerine ugrep ve bfs’e geçerek farklı bir yol seçti:
| Agent | Arama Aracı | Kaynak |
|---|---|---|
| Claude Code | ugrep + bfs (Bash, native) | 2.1.117 release notes5 |
| 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 uzun süre ripgrep tabanlı bir Grep aracı (ve Glob aracı) sundu. Nisan 2026’da yayınlanan 2.1.117 sürümüyle birlikte macOS ve Linux native build’lerinde bu iki tool kaldırıldı; yerine embedded ugrep ve bfs ikilileri Bash üzerinden çağrılır hale geldi. Anthropic’in 2.1.118 notlarında bu değişiklik için “dört ay sürdü, şimdi her şey Bash üzerinden ve daha hızlı” ifadesi kullanıldı. Windows build’leri ve npm ile kurulan sürümler eski davranışı koruyor5.
Not: ugrep, GNU grep ile tam uyumlu bir drop-in replacement olarak konumlanıyor (bakınız: Modern Alternatifler bölümü). Bu geçişle birlikte Claude Code, arama katmanında ripgrep’in
.gitignore-aware performansından ugrep’in regex uyumluluğu ve sıkıştırılmış dosya desteğine geçmiş oldu.
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 hâlâ 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)
Bu katmanın somut bir implementasyonu için Content Intelligence System yazısına bakılabilir.
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.
ast-grep vs ripgrep: Hangisi Ne Zaman Kazanır
İnsanların aradığı karşılaştırma bu, ama ikisini rakip gibi gösteriyor; oysa farklı sorulara cevap veriyorlar. ripgrep metni eşleştirir, ast-grep ise yapıyı. Baytların kabaca nasıl göründüğünü biliyorsanız (bir string, bir regex, bir log satırı) ve ağaç boyunca her geçişi milisaniyeler içinde istiyorsanız ripgrep’e uzanın. Regex’iniz yorum satırları, string’ler veya yanlış sözdizimsel konumdaki eşleşmeleri yakalamaya başladığı anda ast-grep’e geçin, çünkü o noktada gramer farkındalığının yokluğuyla boğuşuyorsunuz demektir.
| Sorduğunuz soru | Araç |
|---|---|
| Bu string veya regex nerede geçiyor? | ripgrep |
Gerçek kodda foo($X) biçimindeki her çağrı? | ast-grep |
| Bir yapısal deseni tüm kod tabanında yeniden adlandır? | ast-grep |
| Dil ayrıştırması olmadan en hızlı ham tarama? | ripgrep |
Pratikte ripgrep’i varsayılan tutuyorum ve yalnızca arama kodu sadece okumakla kalmayıp anlaması gerektiğinde ast-grep’e geçiyorum. Yukarıda anlatılan katmanların farklı seviyelerinde durdukları için “hangisi” sorusunun dürüst cevabı çoğu zaman “ikisi de, farklı işler için” oluyor.
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 ↩
- Grep and Glob removed in Claude Code 2.1.117 (ugrep + bfs via Bash). GitHub Issue ↩ ↩2
- 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 ↩
- 01 ripgrep, grep'e göre 10 kata kadar daha hızlı çalışır ve .gitignore dosyalarını otomatik okur
- 02 AI coding agent'ların arama katmanı hızla değişiyor: Copilot CLI ve Codex ripgrep kullanırken Claude Code 2.1.117 ile ugrep ve bfs'e geçti
- 03 Modern metin arama üç katmanlı bir yapıya evrilmekte: kesin eşleştirme (ripgrep), yapısal arama (ast-grep), semantic arama (mgrep)
- 04 AI agent'lar için en büyük sorun gürültülü sonuçların bağlam penceresini tüketmesidir
- 05 grep hâlâ minimal ortamlarda ve basit boru hattı işlemlerinde vazgeçilmezdir
+ ripgrep neden grep'ten daha hızlı?
ripgrep, Rust dilinde yazılmış olup çok çekirdekli paralel arama, SIMD optimizasyonları ve sonlu otomat tabanlı regex motoru kullanır. Ayrıca .gitignore dosyalarını otomatik okuyarak gereksiz dizinleri atlar. Linux kernel kaynak kodunda yapılan karşılaştırmalarda ripgrep, GNU grep'e göre 10 kata kadar daha hızlı sonuç vermektedir.
+ AI coding agent'lar metin arama için hangi aracı kullanıyor?
GitHub Copilot CLI ve OpenAI Codex ripgrep'i dahili arama motoru olarak kullanırken, Claude Code Nisan 2026'da (sürüm 2.1.117) macOS ve Linux native build'lerde ripgrep tabanlı Grep ve Glob tool'larını kaldırıp embedded ugrep ve bfs'e geçti. Arama artık Bash üzerinden çalışıyor, ayrı bir tool round-trip olmadan.
+ ast-grep nedir ve grep'ten farkı nedir?
ast-grep, metin tabanlı arama yerine Abstract Syntax Tree (soyut sözdizim ağacı) üzerinde yapısal kod araması yapar. Kod yapısını anladığı için 'hata yakalama bloğu olmayan tüm async fonksiyonları bul' gibi sorguları çalıştırabilir. Tree-sitter parser kullanır.
+ Semantic search araçları grep'in yerini alabilir mi?
Hayır, birbirini tamamlayan araçlardır. grep ve ripgrep kesin metin eşleştirme için hızlı ve güvenilirdir. Semantic search araçları (mgrep, grepai) ise doğal dil sorguları ve kavramsal benzerlik araması için kullanılır. Modern geliştirme iş akışında her iki katman da yer almaktadır.
+ ast-grep, ripgrep'in yerini alır mı?
Hayır, farklı katmanlarda çalışırlar. ripgrep ham baytlar üzerinde hızlı metin ve regex eşleştirmesi yapar; ast-grep ise sözdizimi ağacında kodu yapısal olarak eşleştirir ve yeniden yazar. Varsayılan aramanız ripgrep olsun, sorgunun kod yapısını anlaması gerektiğinde (örneğin belirli bir biçimdeki her çağrıyı bulmak veya yapısal bir refactor yapmak) ast-grep'e geçin.