Bash'te Dize Manipülasyonunu Kırmak
Kabuk komut dosyalarıyla çalışırken, yaygın bir görev, bir dizeyi sınırlayıcıya göre bölmektir. Örneğin, noktalı virgülle ayrılmış e-posta adreslerini içeren bir dize düşünün. Her e-postayı ayrı ayrı işlemeniz gerekiyorsa, bu dizenin nasıl bölüneceğini anlamak çok önemli hale gelir. Bu makale, Bash'te bunu başarmak için farklı yöntemler konusunda size rehberlik edecektir.
'tr' komutunu kullanmak ve Dahili Alan Ayırıcıyı (IFS) değiştirmek gibi çözümleri araştıracağız. Sonunda, dize bölme işlemini verimli bir şekilde gerçekleştirebilecek ve IFS'yi varsayılan değerine sıfırlayabileceksiniz. Gelin, Bash komut dosyası oluşturma görevlerinizi derinlemesine inceleyelim ve basitleştirelim!
Emretmek | Tanım |
---|---|
tr | Karakterleri çevirir veya siler. Burada, dizeyi bölmek amacıyla noktalı virgülü yeni satır karakteriyle değiştirmek için kullanılır. |
IFS | Bash komut dosyalarındaki belirli bir sınırlayıcıya göre dizeleri bölmek için kullanılan Dahili Alan Ayırıcı. |
read -r -a | Bir giriş satırını okur ve onu bir diziye böler. -r seçeneği ters eğik çizgilerin kaçış karakterleri olarak yorumlanmasını önler. |
echo | Metni standart çıktıya yazdırır. Bölünmüş dize öğelerini görüntülemek için kullanılır. |
split | Bir dizeyi, belirtilen sınırlayıcıya dayalı olarak dizeler listesine bölen bir Perl işlevi. |
foreach | Bir değerler listesi üzerinde yinelenen bir Perl döngü yapısı. |
Bash String Bölme Tekniklerini Anlamak
İlk Bash betiği, bir dizenin aşağıdakileri kullanarak nasıl bölüneceğini gösterir: emretmek. Burada bir string tanımlıyoruz ve kullan ile birlikte tr noktalı virgül sınırlayıcısını yeni satır karakterine çevirmek için. Bu, dizeyi etkili bir şekilde ayrı satırlara böler. döngü daha sonra her satırda yinelenir ve adresleri köşeli parantez içine yazdırır. Bu yöntem basittir ve dizeleri işlemek için Unix komutlarının güçlü metin işleme yeteneklerinden yararlanır.
Başka bir yöntem, ayarlamayı içerir. . Geçici olarak ayarlayarak noktalı virgül kullanarak dizeyi bir diziye bölebiliriz. Orijinali saklıyoruz ile OIFS değiştirmeden önce, daha sonra geri yükleyebilmemizi sağlamak. komut, giriş dizesini adı verilen bir diziye okur , değiştirilene göre bölme . İşlemden sonra orijinal IFS restore edildi. Bu yaklaşım, Bash'te dize bölme işleminin daha programlı bir yolunu sağlayarak, dizileri daha fazla düzenleme için kullanmamıza olanak tanır.
Sınırlayıcıda Dizeleri Bölmek için Bash Kullanma
Bash Komut Dosyası
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Split string using 'tr' and iterate
mails=$(echo $IN | tr ";" "\n")
for addr in $mails; do
echo "> [$addr]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
IFS Kullanarak Bash'te Bir Dizeyi Bölme
Bash Komut Dosyası
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Save the original IFS
OIFS=$IFS
# Set IFS to semicolon
IFS=';'
# Split string into an array
read -r -a mails2 <<< "$IN"
# Restore the original IFS
IFS=$OIFS
# Iterate over the array
for x in "${mails2[@]}"; do
echo "> [$x]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
Dize Bölme için Python Kullanımı
Python Komut Dosyası
#!/usr/bin/env python3
# Input string
IN = "bla@some.com;john@home.com"
# Split string by semicolon
mails = IN.split(';')
# Iterate and print each element
for addr in mails:
print(f"> [{addr}]")
# Output:
# > [bla@some.com]
# > [john@home.com]
Bir Dizeyi Bölmek için Perl Kullanmak
Perl Komut Dosyası
#!/usr/bin/env perl
use strict;
use warnings;
# Input string
my $IN = "bla@some.com;john@home.com";
# Split string by semicolon
my @mails = split(';', $IN);
# Iterate and print each element
foreach my $addr (@mails) {
print "> [$addr]\n";
}
# Output:
# > [bla@some.com]
# > [john@home.com]
Bash'te Gelişmiş String Bölme Teknikleri
Bash'te dizeleri bölmenin bir başka güçlü yöntemi, emretmek. desen tarama ve işleme için tasarlanmış çok yönlü bir komut satırı yardımcı programıdır. Özel alan ayırıcıları tanımlamamıza olanak tanıdığından, dizeleri bölmek için özellikle yararlı olabilir. Örneğin şunu kullanabiliriz: noktalı virgül sınırlayıcıya göre bir dizeyi bölmek ve tek tek bileşenleri yazdırmak için. Bu yöntem son derece esnektir ve daha karmaşık dize işleme görevlerini yerine getirebilir, bu da onu Bash programcısının araç setinde değerli bir araç haline getirir.
Ek olarak, Dizeleri sınırlayıcılara göre bölmek için komut kullanılabilir. komutu genellikle giriş verilerinin her satırından bölümler çıkarmak için kullanılır. ile bir sınırlayıcı belirterek seçeneğini seçin ve alanları seçin. -f seçeneğini kullanarak bir dizenin parçalarını verimli bir şekilde bölebilir ve çıkartabiliriz. Örneğin, kullanarak ilk e-posta adresini giriş dizesinden çıkarır. Bu gelişmiş yöntemler, Bash'teki dize işleme görevleri için daha fazla kontrol ve hassasiyet sağlar.
- Bash'te sınırlayıcıdaki bir dizeyi nasıl bölerim?
- Şunu kullanabilirsiniz: değişken veya komutlar gibi , , Ve cut sınırlayıcıdaki dizeleri bölmek için.
- Nedir Bash'te değişken?
- (Dahili Alan Ayırıcı), giriş metnini kelimelere veya belirteçlere bölmek için kullanılan karakterleri tanımlayan özel bir değişkendir.
- nasıl sıfırlayabilirim değişken varsayılan değerine döndürülür mü?
- Orijinali kaydet değerini değiştirmeden önce değiştirin ve işlendikten sonra geri yükleyin: .
- Ne yapar komut dize bölmede yapılır mı?
- komut karakterleri çevirir veya siler. Bir dizeyi bölmek için sınırlayıcıları yeni satırlarla değiştirebilir: .
- Bash'i kullanarak bir dizeyi diziye bölebilir miyim?
- Evet, değiştirerek değişken ve kullanım , bir dizeyi bir diziye bölebilirsiniz:
- Nedir komut ne için kullanılır?
- desen tarama ve işlemeye yönelik bir komut satırı yardımcı programıdır. Özel alan ayırıcıları tanımlayarak dizeleri bölebilir.
- Nasıl olur komuta işi?
- komut her giriş satırından bölümler çıkarır. Bir sınırlayıcı belirleyip alanları seçerek dizeleri bölebilir: .
- Neden kullanılıyor dize bölmede yararlı mı?
- Kullanma dizeleri bölmek için özel sınırlayıcılar tanımlamanıza olanak tanır, bu da onu farklı giriş formatları için çok yönlü hale getirir.
- Bash'te bir dizeyi birden fazla sınırlayıcıya bölmek mümkün mü?
- Evet, aşağıdakilerin bir kombinasyonunu kullanabilirsiniz: Ve birden fazla sınırlayıcıyı işlemek için.
- Kullanabilirmiyim Bash'te dize bölmek için?
- Sırasında öncelikle bir akış düzenleyicisidir, aşağıdaki gibi diğer komutlarla birleştirilebilir dizeleri dolaylı olarak bölmek için.
Bash'te dize manipülasyonunda ustalaşmak, komut dosyası yazma verimliliğinizi önemli ölçüde artırabilir. Kullanılıp kullanılmayacağı basit sınırlayıcılar veya daha gelişmiş araçlar için Ve , bu teknikler etkili Bash programlama için gereklidir. Her zaman orijinali geri yüklemeyi unutmayın IFS komut dosyalarınızda beklenmeyen davranışları önlemek için. Bu yöntemlerle Bash betiklerinizde çok çeşitli dize işleme görevlerini gerçekleştirebilirsiniz.