Bash ile String (Metin) Parçalama: Yöntemler ve İpuçları

Bash scriptlerinde bir metin dizisini belirli bir ayırıcıya göre nasıl parçalayacağınızı öğrenin. IFS, read, tr ve awk gibi araçlarla verimli metin işleme tekniklerini keşfedin.

L
Linuxize
1 görüntülenme
Bash ile String (Metin) Parçalama: Yöntemler ve İpuçları

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" # ubuntu

Dikkat: IFS=":" ataması sadece o satırdaki read komutu 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"; done

Geliş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:

  1. tr: Metni satırlara bölmek için idealdir. echo "a,b,c" | tr ',' '\n'
  2. awk: Karmaşık yapılandırılmış verilerde -F parametresi ile ayırıcıyı belirleyerek istediğiniz sütunu print $1 ile 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.

Kaynak

Linuxize