Bash Bölünmüş Dize Örnekleri

Bash Split String Examples



Programlamada çeşitli amaçlar için string verilerini bölmemiz gerekiyor. Birçok programlama dilinde, herhangi bir dizi verisini birden çok parçaya bölmek için 'split' adlı yerleşik bir işlev bulunur. Ancak bash'ta dizeyi bölmek için yerleşik bir işlev yoktur. Normalde, herhangi bir dize verisini bölmek için tekli veya çoklu sınırlayıcılar kullanılır. Dizeyi bash'ta nasıl bölebileceğiniz bu öğreticide farklı örnekler kullanılarak gösterilmektedir.








$IFS değişkenini kullanma

$IFS özel kabuk değişkeni, bir dizeyi sözcüklere bölmek için bash'ta kullanılır. $IFS değişkenine, dizeyi bölmek için belirli bir sınırlayıcı atamak için kullanılan Dahili Alan Ayırıcı (IFS) adı verilir. Word sınırları, bash'de $IFS ile tanımlanır. Beyaz boşluk, bu değişken için varsayılan sınırlayıcı değerdir. ' ', ' ', '-' vb. gibi herhangi bir başka değer, sınırlayıcı olarak kullanılabilir. Değeri $IFS değişkenine atadıktan sonra, string değeri iki seçenekle okunabilir. Bunlar '-r' ve '-a'dır. '-r' seçeneği, ters eğik çizgiyi () kaçış karakteri yerine bir karakter olarak okumak için kullanılır ve '-a' seçeneği, bölünmüş sözcükleri bir dizi değişkeninde depolamak için kullanılır. Dize, bash'de $IFS değişkeni kullanılmadan bölünebilir. Aşağıdaki örneklerde dize verilerini bölmenin farklı yolları ($IFS ile veya $IFS olmadan) gösterilmiştir.



Örnek-1: Dizeyi şuna göre ayır

Dize değeri varsayılan olarak boşlukla bölünür. 'split1.sh' adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin. Burada, bir dize değeri atamak için $text değişkeni kullanılır. Kabuk değişkeni $IFS, dize verilerini bölmek için kullanılacak karakteri atamak için kullanılır. Bu komut dosyasında ayırıcı olarak boşluk kullanılır. '-a' seçeneği, bölünmüş verileri $strarr adlı bir dizi değişkeninde depolamak için okuma komutuyla birlikte kullanılır. $strarr dizisinin her bir elemanını okumak için 'for' döngüsü kullanılır.



split1.sh





#!/bin/bash

#Dize değerini tanımla
Metin='LinuxHint'e Hoş Geldiniz'

# Sınırlayıcı olarak boşluk ayarla
IFS=''

#Bölünmüş kelimeleri boşluk sınırlayıcıya göre bir diziye oku
okuman -ilestrarr<<< '$metin'

#Toplam kelimeleri say
dışarı attı 'Var${#strarr[*]}metindeki kelimeler.

# Döngüyü kullanarak dizinin her değerini yazdırın
içinsaatiçinde '${strarr[@]}';
yapmak
baskı '$ saat '
tamamlamak

Çıktı:

Komut dosyasını çalıştırın.



$bashsplit1.sh

Komut dosyasını çalıştırdıktan sonra aşağıdaki çıktı görünecektir.

Örnek-2: Dizeyi belirli bir karaktere göre bölme

Dize değerini bölmek için herhangi bir özel karakter ayırıcı olarak kullanılabilir. adlı bir dosya oluşturun split2.sh ve aşağıdaki kodu ekleyin. Burada kitap adı, yazar adı ve fiyat değeri giriş dizesi olarak virgül(,) eklenerek alınır. Daha sonra, dize değeri bölünür ve $IFS kabuk değişkeninin değerine dayalı bir dizide saklanır. Dizi öğelerinin her değeri, dizin değeri tarafından yazdırılır.

split2.sh

#!/bin/bash

#Dize değerini oku
dışarı attı 'Kitap adı, yazar adı ve fiyatını virgülle ayırarak giriniz. '
okumanMetin

# Sınırlayıcı olarak virgül ayarla
IFS=','

#Bölünmüş kelimeleri virgül sınırlayıcıya göre bir diziye oku
okuman -ilestrarr<<< '$metin'

#Bölünmüş kelimeleri yazdır
dışarı attı 'Kitap Adı:${strarr[0] }'
dışarı attı 'Yazar Adı:${strarr[1]}'
dışarı attı 'Fiyat :${strarr[2]}'

Çıktı:

Komut dosyasını çalıştırın.

$bashsplit2.sh

Komut dosyasını çalıştırdıktan sonra aşağıdaki çıktı görünecektir.

Örnek-3: Dizeyi $IFS değişkeni olmadan bölün

Bu örnek, dize değerinin bash'de $IFS kullanılmadan nasıl bölünebileceğini gösterir. ' adlı bir dosya oluşturun split3.sh ' ve aşağıdaki kodu ekleyin. Komut dosyasına göre, iki nokta üst üste ile bir metin değeri ( :) bölme için girdi olarak almak zorundadır. Burada, string verilerini bölmek için -d seçeneği ile 'readarray' komutu kullanılır. $IFS gibi komutta ayırıcı karakteri tanımlamak için '-d' seçeneği kullanılır. Ardından, dizi öğelerini yazdırmak için 'for' döngüsü kullanılır.

split3.sh

#!/bin/bash

#Ana dizeyi oku
dışarı attı 'Bölmek için iki nokta üst üste(:) ile dizeyi girin'
okumanana mesaj

#Dizeyi ':' sınırlayıcısına göre böl
okuma dizisi-NS:-Tstrarr<<< '$anabilgisayar'
baskı ' '

# Dizinin her değerini döngü kullanarak yazdır
için (( n=0; n< ${#strarr[*]}; n++))
yapmak
dışarı attı '${strarr[n]}'
tamamlamak

Çıktı:

Komut dosyasını çalıştırın.

$bashsplit3.sh

Komut dosyasını çalıştırdıktan sonra aşağıdaki çıktı görünecektir.

Örnek-4: Dizeyi çok karakterli bir sınırlayıcıyla ayırın

Dize değeri, önceki tüm örneklerde tek bir karakter sınırlayıcı ile bölünür. Bu örnekte, çok karakterli sınırlayıcı kullanarak dizeyi nasıl bölebileceğiniz gösterilmiştir. adlı bir dosya oluşturun Times split4.sh ve aşağıdaki kodu ekleyin. Burada, bir dize verisini depolamak için $text değişkeni kullanılır. $delimiter değişkeni, sonraki ifadelerde sınırlayıcı olarak kullanılan çok karakterli bir veriyi atamak için kullanılır. $myarray değişkeni, her bölünmüş veriyi bir dizi öğesi olarak depolamak için kullanılır. Son olarak, tüm bölünmüş veriler 'for' döngüsü kullanılarak yazdırılır.

split4.sh

#!/bin/bash

#Bölünecek dizeyi tanımla
Metin='learnHTMLlearnPHPlearnMySQLlearnJavascript'

#Çok karakterli sınırlayıcı tanımla
sınırlayıcı='öğrenmek'
#Sınırlayıcıyı ana dizeyle birleştir
sicim=$metin$ sınırlayıcı

#Sınırlayıcıya göre metni böl
myarray=()
süre [[ $dize ]];yapmak
myarray+=( '${string%%'$sınırlayıcı'*}' )
sicim=${string#*'$sınırlayıcı'}
tamamlamak

#Bölmeden sonra kelimeleri yazdır
içindeğeriçinde ${myarray[@]}
yapmak
dışarı attı -n '$değer'
tamamlamak
baskı ' '

Çıktı:

Komut dosyasını çalıştırın.

$bashsplit4.sh

Komut dosyasını çalıştırdıktan sonra aşağıdaki çıktı görünecektir.

Çözüm:

Dize verilerinin farklı programlama amaçları için bölünmesi gerekir. Bu öğreticide, bash'ta dize verilerini bölmenin çeşitli yolları gösterilmektedir. Umarım, yukarıdaki örnekleri uyguladıktan sonra, okuyucular herhangi bir dizi verisini gereksinimlerine göre bölebileceklerdir.

Daha fazla bilgi için izle video !