Giriş
Bash scriptleri yazarken CSV satırlarını okumak, yapılandırma dosyalarını ayrıştırmak veya kullanıcı girdilerini işlemek için sık sık bir metin dizisini (string) belirli bir ayırıcıya (delimiter) göre parçalamanız gerekir. Bash'te yerleşik bir split() fonksiyonu bulunmasa da, kabuk (shell) özellikleri ve temel yardımcı araçlar bu işlemi oldukça kolaylaştırır.
IFS Değişkeni ile Parçalama
Bash'te kelime parçalama işlemi, IFS (Internal Field Separator) değişkeni tarafından kontrol edilir. Varsayılan olarak boşluk, sekme ve satır başı karakterlerini içeren bu değişkeni, belirli bir karakter (örneğin virgül veya iki nokta üst üste) ile değiştirerek parçalama işlemini gerçekleştirebilirsiniz.
read Komutu ile Değişkenlere Atama
Metni doğrudan değişkenlere atamak için en temiz yöntem read komutunu kullanmaktır:
STR="ubuntu:debian:fedora:arch"
IFS=":" read -r first second third fourth <<< "$STR"
echo "$first" # ubuntuDikkat:
IFS=":"ataması sadece o satırdakireadkomutu için geçerlidir, genel ayarları bozmaz.
Dizi (Array) Olarak Parçalama
Eğer parçaların sayısını önceden bilmiyorsanız, -a parametresini kullanarak sonucu bir diziye aktarabilirsiniz:
STR="1,2,3,4,5"
IFS="," read -r -a numbers <<< "$STR"
for n in "${numbers[@]}"; do echo "$n"; doneGelişmiş Yöntemler
Çok Karakterli Ayırıcılar
IFS tek karakterli ayırıcılar için tasarlanmıştır. Eğer :: gibi çok karakterli bir ayırıcı kullanmanız gerekiyorsa, önce parametre genişletme (parameter expansion) ile bu karakteri tek bir karaktere dönüştürmelisiniz:
STR="alpha::beta::gamma"
IFS="|" read -r -a parts <<< "${STR//::/|}"tr ve awk Kullanımı
Eğer veriyi sadece satırlara bölmek veya belirli sütunları seçmek istiyorsanız tr ve awk araçları oldukça güçlüdür:
- tr: Metni satırlara bölmek için idealdir.
echo "a,b,c" | tr ',' '\n' - awk: Karmaşık yapılandırılmış verilerde
-Fparametresi ile ayırıcıyı belirleyerek istediğiniz sütunuprint $1ile alabilirsiniz.
Sonuç
Bash'te metin parçalama işlemi, verinin yapısına göre doğru aracı seçmekle ilgilidir. Yapılandırılmış veriler için read ve IFS, hızlı komut satırı işlemleri için tr ve awk, sadece ön ek veya son ek işlemleri için ise parametre genişletme yöntemleri en verimli çözümlerdir.


