# sed ile String’lerden Sayı Çıkarma: Tam Bir Rehber
Bir metin dosyasında veya değişkende saklı sayıları hızlıca ayıklamak mı istiyorsunuz? Veri analizi, günlük dosya işleme veya otomasyon görevlerinde sıkça karşılaştığımız bu durum için sed komutu mükemmel bir çözüm sunuyor. Bu rehberde, sed kullanarak string’lerden sayıları nasıl çıkaracağınızı adım adım, yeni başlayanlardan ileri seviye kullanıcılara kadar herkes için anlaşılır bir şekilde öğreneceksiniz. Farklı senaryolar için pratik çözümler ve performans optimizasyonu tekniklerini ele alacağız.
Öğrenme Yol Haritası:
* Yeni Başlayan: Temel sed komutları ve basit sayı çıkarma örnekleri.
* Orta Seviye: Gerçek dünya senaryoları, düzenli ifadelerin kullanımı ve optimizasyon ipuçları.
* İleri Seviye: Performans analizi, karmaşık durumlar ve sınır durumlarının ele alınması.
Sed’in Temelleri: String İşleme Gücü
sed (stream editor), metin dosyalarını satır satır işleyen güçlü bir komut satırı aracıdır. Düzenli ifadeler (regular expressions) kullanarak metinleri arama, değiştirme, silme ve çıkarma gibi işlemleri gerçekleştirebilir. Sayı çıkarma işlemi için düzenli ifadeler ve sed‘in s (substitution) komutu temel olacaktır. Düzenli ifadeler, metin desenlerini tanımlamak için kullanılan özel bir dildir. Örneğin, [0-9] ifadesi herhangi bir rakamı, [0-9]+ ise bir veya daha fazla rakamı temsil eder.
Sed ile Sayı Çıkarma: Adım Adım Uygulama (Yeni Başlayanlar İçin)
Öncelikle basit bir örnek ile başlayalım. Şu string’imiz olsun: “Ürün fiyatı: 125 TL”. Bu string’den “125” sayısını çıkarmak için şu sed komutunu kullanabiliriz:
echo "Ürün fiyatı: 125 TL" | sed 's/[^0-9]//g'
Bu komut, string’deki rakamlar dışındaki tüm karakterleri ([^0-9]) global olarak (g) siler. Sonuç olarak sadece “125” kalacaktır. echo komutu string’i sed‘e gönderir. | sembolü ise boru hattı (pipeline) işlemini temsil eder, sed‘in çıktısını konsola yazdırır.
Daha Karmaşık Durumlar: Birden Fazla Sayı (Orta Seviye)
Şimdi daha gerçekçi bir senaryo ele alalım. Bir günlük dosyasında şu satırlar olsun:
2023-10-27 10:30:15 Hata Kodu: 404, İşlem Süresi: 0.25 saniye
2023-10-27 10:31:00 Başarılı, İşlem Süresi: 0.1 saniye
Bu satırlardan işlem sürelerini (0.25 ve 0.1) çıkarmak için daha gelişmiş bir düzenli ifade kullanmalıyız. Aşağıdaki komut, “İşlem Süresi:” ifadesinden sonra gelen sayıları (ondalıklı sayıları da içeren) yakalayıp geri kalanı siler:
sed 's/.*İşlem Süresi: \([0-9.]*\).*$/\1/' günlük.log
Bu komutta .* sıfır veya daha fazla karakteri temsil eder. \( \) ifadesi ise yakalanacak kısmı belirtir (capturing group). \1 ise yakalanan ilk grubun (burada işlem süresi) çıktıda kullanılmasını sağlar. $ sembolü ise satır sonunu belirtir. günlük.log dosyasının içeriğini bu komutla işleyerek sadece işlem sürelerini elde edebiliriz.
Performans Optimizasyonu: Büyük Dosyalar İçin İpuçları
Büyük dosyalarla çalışırken sed‘in performansı önemlidir. Aşağıdaki ipuçlarını kullanarak performansı artırabilirsiniz:
* Gereksiz işlemlerden kaçının: Sadece gerekli olan dönüşümleri yapın. Unnecessary substitutions can slow down the process.
* -n seçeneğini kullanın: -n seçeneği, sed‘in sadece eşleşen satırları yazdırmasını sağlar, bu da performansı artırabilir.
* -i seçeneği (inplace editing): Dosyayı doğrudan değiştirmek için -i seçeneğini kullanın. Bu, dosyayı okuyup yazma işlemlerinden tasarruf sağlar. Ancak bu işlem geri alınamaz olduğundan dikkatli olunmalıdır. Yedek dosya almayı unutmayın!
* sed yerine daha uygun araçlar: Çok büyük dosyalar için awk veya perl gibi daha güçlü ve performanslı araçları tercih edebilirsiniz.
Gerçek Dünya Senaryoları: Vaka Çalışmaları
Vaka 1: Log Dosyası Analizi: Bir web sunucusunun günlük dosyasında hata kodlarını (örneğin, 404, 500) ayıklamak isteyebilirsiniz. Bu durumda düzenli ifadeler kullanarak hata kodlarını içeren satırları filtreleyebilir ve sadece hata kodlarını çıkarabilirsiniz.
Vaka 2: Veri Temizleme: Bir CSV dosyasında sayısal veriler string olarak saklanıyor olabilir (örneğin, “Fiyat:12.99”). sed kullanarak bu string’lerden sayıları ayıklayıp temiz bir sayısal veri kümesi oluşturabilirsiniz.
Vaka 3: Otomasyon: Bir komut dosyası içinde sed‘i kullanarak dosya isimlerinden versiyon numaralarını çıkarabilir ve otomatik güncelleme işlemleri gerçekleştirebilirsiniz.
İleri Seviye Teknikler: Karmaşık Desenler ve Sınır Durumları
Bazı durumlarda, sayıları içeren string’ler daha karmaşık olabilir. Örneğin, virgül veya nokta gibi ayırıcılar içerebilir. Bu durumlarda daha karmaşık düzenli ifadeler kullanmanız gerekebilir. Ayrıca, sayıların string içindeki konumunu da dikkate almanız gerekebilir.
Örneğin, “Sipariş No: 12345, Miktar: 2, Fiyat: 10.99” string’inden sadece fiyatı çıkarmak için daha seçici bir düzenli ifade kullanmamız gerekir. Bu tür durumlarda, düzenli ifadelerin gücünden tam olarak yararlanmanız ve doğru yakalama gruplarını tanımlamanız önemlidir.
Sonuç: Sed ile Verimli String İşleme
sed komutu, string’lerden sayıları çıkarmak için güçlü ve esnek bir araçtır. Bu rehberde, yeni başlayanlardan ileri seviye kullanıcılara kadar farklı seviyelerdeki kullanıcılar için pratik örneklerle ve performans optimizasyonu ipuçlarıyla sed kullanımını detaylı bir şekilde ele aldık. Düzenli ifadeleri doğru kullanarak, karmaşık string’lerden bile istenen sayıları kolayca çıkarabilirsiniz. Unutmayın ki, doğru düzenli ifadeyi seçmek ve performans optimizasyonuna dikkat etmek, büyük dosyalarda verimliliği artırır. Daha detaylı bilgi ve ileri seviye sed teknikleri için [Fatih Soysal’ın web sitesini](https://fatihsoysal.com) ziyaret edebilirsiniz.
Sıkça Sorulan Sorular:
1. sed komutunda hata alırsam ne yapmalıyım? Hata mesajını dikkatlice inceleyin ve düzenli ifadenizi kontrol edin. Yanlış karakterler, kaçış karakterleri eksikliği veya yanlış kullanım gibi hatalar olabilir.
2. Büyük dosyalar için sed yerine hangi araçları kullanabilirim? awk veya perl gibi daha güçlü ve performanslı araçlar daha uygundur.
3. Ondalıklı sayıları nasıl çıkarabilirim? Düzenli ifadelerde . karakterini kullanarak ondalık sayıları yakalayabilirsiniz. Örneğin, [0-9.]+ ifadesi bir veya daha fazla rakam veya nokta içeren bir string’i yakalar.
4. Negatif sayıları nasıl işleyebilirim? Düzenli ifadenize - karakterini ekleyerek negatif sayıları da yakalayabilirsiniz. Örneğin, -?[0-9.]+ ifadesi negatif veya pozitif ondalıklı sayıları yakalar.
5. sed komutlarını bir dosyada nasıl kaydedip daha sonra çalıştırabilirim? sed komutlarınızı bir dosyada (örneğin, sed_komutlari.sed) kaydedin ve daha sonra sed -f sed_komutlari.sed dosya_adi.txt komutu ile çalıştırın.
Yazar: Fatih Soysal
