Linux Komut Satırında Güçlü Metin İşleme: grep, sed ve awk ile Verimli Veri Dönüşümü
Linux komut satırında metin işleme araçları olan grep, sed ve awk kullanarak verileri nasıl analiz edebilir, dönüştürebilir ve yönetebilirsiniz? Bu rehberde, gerçek dünya senaryolarıyla birlikte bu araçların pratik kullanımlarını öğrenin.
Caner Serbest
Sistem ve Altyapı
5 min read
Linux Komut Satırında Güçlü Metin İşleme: grep, sed ve awk ile Verimli Veri Dönüşümü
Linux komut satırı, sistem yöneticileri, geliştiriciler ve veri analistleri için vazgeçilmez bir araçtır. Özellikle metin tabanlı verilerle çalışırken, grep, sed ve awk gibi güçlü komutlar, verileri hızlı ve verimli bir şekilde işlemenizi sağlar. Bu rehberde, bu üç aracın temel ve ileri düzey kullanımlarını, gerçek dünya senaryolarıyla birlikte ele alacağız.
1. grep: Metin Arama ve Filtreleme Aracı
grep (Global Regular Expression Print), metin dosyalarında belirli kalıpları aramak için kullanılan temel bir komuttur. Sıklıkla log dosyalarını analiz ederken, kod tabanlarında hata ararken veya belirli bir kelimeyi içeren dosyaları bulurken kullanılır.
Temel Kullanım
# Bir dosyada belirli bir kelimeyi ara
grep "error" /var/log/syslog
# Büyük/küçük harf duyarlılığını kaldır
grep -i "warning" /var/log/syslog
# Satır numaralarını göster
grep -n "failed" /var/log/auth.log
# Tersini eşleştir (örneğin, "success" dışındaki tüm satırlar)
grep -v "success" /var/log/nginx/access.log
Düzenli İfadelerle Gelişmiş Arama
grep, düzenli ifadeler (regex) destekler. Örneğin:
# Belirli bir desenle eşleşen satırları bul (örneğin, IP adresleri)
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/nginx/access.log
# Belirli bir desenle başlamayan satırları bul
grep -v "^#" /etc/nginx/nginx.conf
# Birden fazla desenle eşleş
grep -e "error" -e "warning" /var/log/syslog
Pratik Kullanım Örneği: Hata Loglarını Analiz Etme
Bir sistem yöneticisi olarak, /var/log/syslog dosyasındaki kritik hataları hızlıca bulmanız gerekebilir. Aşağıdaki komut, son 100 satırda “CRITICAL” veya “ERROR” içeren satırları gösterir:
tail -n 100 /var/log/syslog | grep -E "CRITICAL|ERROR"
2. sed: Akış Düzenleyici (Stream Editor)
sed (Stream Editor), metin dosyalarında yer değiştirme, silme, ekleme ve değiştirme işlemleri yapmak için kullanılır. Genellikle log dosyalarını temizlemek, CSV dosyalarını biçimlendirmek veya metin dosyalarında toplu değişiklikler yapmak için kullanılır.
Temel Kullanım
# Bir dosyada belirli bir kelimeyi başka bir kelimeyle değiştir
sed 's/old_text/new_text/g' dosya.txt
# Değişiklikleri doğrudan dosyaya kaydet (in-place edit)
sed -i 's/localhost/127.0.0.1/g' /etc/hosts
# Belirli satırları sil
sed '/^#/d' dosya.txt # Yorum satırlarını sil
# Belirli bir satır aralığını sil
sed '5,10d' dosya.txt # 5. ile 10. satırlar arasındaki satırları sil
Gelişmiş Kullanım: CSV Dosyalarını Biçimlendirme
Bir CSV dosyasındaki boşlukları temizlemek ve belirli bir sütunu biçimlendirmek için sed kullanabilirsiniz:
# CSV dosyasındaki boşlukları temizle
sed 's/[[:space:]]*,[[:space:]]*/,/g' veriler.csv
# Belirli bir sütunu biçimlendir (örneğin, 2. sütundaki sayıları 2 ondalık basamaklı hale getir)
sed 's/\([0-9]\+\)\.\([0-9]\+\)/\1.\20/g' veriler.csv
Pratik Kullanım Örneği: Log Dosyalarını Temizleme
Bir web sunucusunun log dosyasındaki istenmeyen karakterleri temizlemek için:
# Log dosyasındaki "-" karakterlerini kaldır
sed 's/--//g' /var/log/nginx/access.log > clean_access.log
# Belirli bir IP adresini maskelendir
sed 's/192\.168\.1\.100/XXX.XXX.XXX.XXX/g' /var/log/nginx/access.log
3. awk: Metin ve Veri İşleme Dili
awk, metin dosyalarını sütunlar ve satırlar halinde işlemek için kullanılan bir programlama dilidir. Özellikle CSV, TSV ve diğer yapılandırılmış metin dosyalarını analiz etmek için idealdir. awk, verileri filtrelemek, toplamak, biçimlendirmek ve raporlamak için kullanılır.
Temel Kullanım
# Bir dosyanın belirli bir sütununu göster
awk '{print $2}' dosya.txt
# Belirli bir sütundaki verileri filtrele
awk '$3 > 100 {print $0}' dosya.txt
# Belirli bir sütundaki verileri toplamak
awk '{sum += $3} END {print sum}' dosya.txt
# CSV dosyasındaki belirli bir sütunu biçimlendir
awk -F',' '{print $1, "|", $3}' veriler.csv
Gelişmiş Kullanım: Log Analizi
Bir web sunucusunun log dosyasından en çok istek yapılan sayfaları ve bunların sayısını çıkarmak için:
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
Bu komut:
- Log dosyasının 7. sütununu (istek yapılan URL) alır.
- Satırları sıralar.
- Eşsiz URL’leri sayar (
uniq -c). - Sayısal olarak sıralar (
sort -nr).
Pratik Kullanım Örneği: Veri Toplama ve Raporlama
Bir sistem yöneticisi olarak, sunucuların CPU kullanımını izlemek için aşağıdaki komutu kullanabilirsiniz:
# CPU kullanımını gösteren bir dosyadan en yüksek kullanımı olan süreçleri bul
cat cpu_usage.log | awk '$3 > 90 {print $0}'
4. grep, sed ve awk’ı Birlikte Kullanma
Bu üç aracı birlikte kullanarak daha karmaşık işlemler gerçekleştirebilirsiniz. Örneğin, bir log dosyasındaki belirli bir hata kodunu bulup, ardından bu hataların bulunduğu satırları temizleyebilir ve sonuçları bir rapora aktarabilirsiniz.
Örnek Senaryo: Hata Kodlarını Raporlama
# 1. Belirli bir hata kodunu içeren satırları bul
grep "500 Internal Server Error" /var/log/nginx/error.log > error_500.log
# 2. Bu satırlardan belirli bir sütunu çıkarmak için awk kullan
awk '{print $1, $2, $7}' error_500.log > error_500_report.txt
# 3. Raporun sonunda kaç hata olduğunu göster
wc -l error_500_report.txt
Örnek Senaryo: Veri Dönüşümü ve Temizleme
Bir CSV dosyasındaki verileri temizlemek ve belirli bir formata dönüştürmek için:
# 1. CSV dosyasındaki boşlukları temizle
sed 's/[[:space:]]*,[[:space:]]*/,/g' veriler.csv > clean_veriler.csv
# 2. Belirli bir sütundaki verileri biçimlendir
awk -F',' '{print $1, "|", toupper($2), "|", $3}' clean_veriler.csv > formatted_veriler.txt
5. En İyi Uygulamalar ve İpuçları
-
Veri Kaybını Önleme:
sed -ikullanırken, orijinal dosyanın bir yedeğini alın:cp dosya.txt dosya.txt.bak && sed -i 's/old/new/g' dosya.txt -
Performans Optimizasyonu: Büyük dosyalarla çalışırken,
grepveawkkullanırken performansı artırmak için:LC_ALL=Cortam değişkenini kullanarak yerel ayarları devre dışı bırakın.grepyerineripgrep(rg) gibi daha hızlı alternatifler kullanın.
-
Düzenli İfadeleri Öğrenme:
grep,sedveawkkullanırken regex bilgisi çok önemlidir. RegexOne gibi kaynaklardan düzenli ifadeleri öğrenin. -
Komut Zincirleme: Komutları zincirleyerek daha karmaşık işlemler gerçekleştirin. Örneğin:
cat log.txt | grep "error" | sed 's/error/ERROR/g' | awk '{print $1, $2}' -
Log Rotasyonu ve Yönetimi: Log dosyalarını yönetirken,
logrotatearacını kullanarak log dosyalarını otomatik olarak döndürün ve sıkıştırın.
6. Gerçek Dünya Uygulamaları
Uygulama 1: Web Sunucusu Loglarını Analiz Etme
Bir web sunucusunun log dosyasından en çok istek yapılan sayfaları ve bunların sayısını çıkarmak için:
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
Bu komut, en çok istek yapılan 10 sayfayı gösterir.
Uygulama 2: Sistem Loglarından Kritik Hataları Bulma
Sistem loglarından “OOM killer” (Out of Memory) hatalarını bulmak için:
grep -i "oom" /var/log/syslog
Uygulama 3: Veri Dosyalarını Temizleme ve Biçimlendirme
Bir CSV dosyasındaki verileri temizlemek ve belirli bir formata dönüştürmek için:
# 1. CSV dosyasındaki boşlukları temizle
sed 's/[[:space:]]*,[[:space:]]*/,/g' veriler.csv > clean_veriler.csv
# 2. Belirli bir sütundaki verileri biçimlendir
awk -F',' '{print $1, "|", toupper($2), "|", $3}' clean_veriler.csv > formatted_veriler.txt
Uygulama 4: Veri Toplama ve Raporlama
Bir sistem yöneticisi olarak, sunucuların disk kullanımını izlemek için:
df -h | awk 'NR>1 {print $5 " " $6}' | sort -n
Bu komut, disk kullanımını yüzde olarak gösterir ve en yüksek kullanıma sahip diskleri sıralar.
7. Sonuç ve Özet
Linux komut satırında grep, sed ve awk kullanarak metin işleme, veri analizi ve raporlama yapabilirsiniz. Bu araçlar, sistem yöneticileri, geliştiriciler ve veri analistleri için vazgeçilmez araçlardır. Temel kullanımlarından ileri düzey uygulamalarına kadar bu araçları öğrenerek, verileri daha verimli ve etkili bir şekilde işleyebilirsiniz.
Unutmayın, bu araçları kullanırken:
- Düzenli ifadeleri öğrenin (regex).
- Komutları zincirleyerek daha karmaşık işlemler gerçekleştirin.
- Veri kaybını önlemek için yedek alın.
- Performansı optimize etmek için yerel ayarları devre dışı bırakın.
Bu rehberde öğrendiğiniz teknikleri uygulayarak, Linux komut satırında metin işleme konusunda ustalaşabilir ve verilerinizi daha verimli bir şekilde yönetebilirsiniz.
Ek Kaynaklar
- GNU grep Kılavuzu
- sed ve awk Kılavuzu
- RegexOne (Düzenli İfadeler Eğitimi)
- Linux Komut Satırı Kılavuzu
Siz de bu araçları kullanarak verilerinizi nasıl daha verimli işliyorsunuz? Yorumlarınızı paylaşın!
Bu yazı Mistral ile otomatik oluşturulmuştur.