PowerShell Kullanarak Bir Dizideki Birden Çok Dize Nasıl Değiştirilir?


Son zamanlarda bazı dize manipülasyonları yapıyordum ve bir PowerShell dizisindeki birden çok dizeyi değiştirmek istedim. Dört yöntem denedim. Bu eğitimde size PowerShell kullanarak bir dizideki birden çok dizeyi nasıl değiştireceğinizi göstereceğim.

PowerShell kullanarak bir dizideki birden çok dizeyi değiştirmek için normal ifadeleri destekleyen -replace operatörünü kullanabilirsiniz. Örneğin, @(“CA”, “NY”, “TX”, “FL”) durum kısaltmalarından oluşan bir diziniz varsa, bunları $states=$states -replace “CA” kullanarak tam durum adlarıyla değiştirebilirsiniz. "Kaliforniya"; $states=$states -“NY”, “New York” yerine; $states=$states -“TX”, “Texas” yerine; $states=$states -"FL", "Florida" yerine.

Yöntem 1: -replace Operatörünü Kullanma

PowerShell'deki -replace operatörü dizeleri değiştirmenin en kolay yoludur. Düzenli ifadeler kullanır. PowerShell'deki -replace operatörünü kullanarak bir dizideki birden çok dizeyi nasıl değiştirebileceğiniz aşağıda açıklanmıştır.

Size bir örnek göstereyim.

Örnek

Kısaltmaları tam durum adlarıyla değiştirerek standartlaştırmak istediğiniz durum adları ve kısaltmalardan oluşan bir dize diziniz olduğunu varsayalım.

Aşağıda PowerShell betiği bulunmaktadır.

$states = @("CA", "NY", "TX", "FL", "CA", "NY")

# Replace state abbreviations with full names
$states = $states -replace "CA", "California"
$states = $states -replace "NY", "New York"
$states = $states -replace "TX", "Texas"
$states = $states -replace "FL", "Florida"

$states

Bu örnekte, her durum kısaltmasını tam adıyla değiştirmek için -replace operatörünü kullanıyoruz.

Çıkış :

California
New York
Texas
Florida
California
New York

Yukarıdaki PowerShell betiğini VS kodunu kullanarak çalıştırdım ve değiştirdikten sonra bana tam çıktıyı gösteriyor. Aşağıdaki ekran görüntüsüne göz atın:

PowerShell'de Dizi İçeriğini Kontrol Et

Yöntem 2: Change() Yöntemini Kullanma

Replace() yöntemi, PowerShell'deki dizeleri değiştirmenin başka bir yoludur. Bu yöntem büyük/küçük harfe duyarlıdır ve normal ifadeler kullanmaz.

Size PowerShell'deki bir dizideki birden çok dizeyi değiştirmek için replacement() yönteminin nasıl kullanılacağına dair bir örnek göstereyim.

Örnek

Düzeltmek istediğiniz yaygın yazım hatalarına sahip bir dizi şehir adınızın olduğunu varsayalım.

$cities = @("Los Angles", "San Fransisco", "New Yrok", "Chcago")

# Correct common typos
$cities = $cities.ForEach{ $_.Replace("Los Angles", "Los Angeles") }
$cities = $cities.ForEach{ $_.Replace("San Fransisco", "San Francisco") }
$cities = $cities.ForEach{ $_.Replace("New Yrok", "New York") }
$cities = $cities.ForEach{ $_.Replace("Chcago", "Chicago") }

$cities

ForEach yöntemi dizideki her öğe üzerinde yinelenir ve yazım hatalarını düzeltmek için Replace() yöntemini uygular.

Çıkış :

Los Angeles
San Francisco
New York
Chicago

Burada yukarıdaki PowerShell betiğini çalıştırdıktan sonra aşağıdaki ekran görüntüsünde çıktıyı görebilirsiniz.

PowerShell'de Bir Diziyi Dizeye Nasıl Dönüştürürsünüz? konusuna göz atın.

Yöntem 3: Toplu Değiştirmeler için Hashtable Kullanma

Birden fazla değişiklik için, özellikle büyük bir veri kümesiyle çalışırken karma tablo kullanmak, komut dosyanızı daha verimli ve bakımı kolay hale getirebilir. Size bir örnek göstereyim.

Örnek

Hashtable kullanarak eyalet kısaltmalarının listesini tam adlarıyla güncelleyelim.

$states = @("CA", "NY", "TX", "FL", "CA", "NY")
$replacements = @{
    "CA" = "California"
    "NY" = "New York"
    "TX" = "Texas"
    "FL" = "Florida"
}

# Replace abbreviations using the hashtable
$states = $states.ForEach{ 
    $replacements.ContainsKey($_) ? $replacements[$_] : $_ 
}

$states

Bu örnekte, kısaltmaların eşlemelerini tam adlarla depolamak için bir karma tablosu kullanıyoruz. ForEach yöntemi, geçerli öğenin hash tablosunda mevcut olup olmadığını kontrol eder ve onu buna göre değiştirir.

Çıkış:

California
New York
Texas
Florida
California
New York

Ayrıca aşağıdaki ekran görüntüsündeki çıktıya da göz atabilirsiniz, yukarıdaki PowerShell betiğini çalıştırdığınızda tam çıktıyı alacaksınız.

Yöntem 4: Özel İşlevleri Kullanma

Bu son yöntemdir. PowerShell'de bir dizideki birden çok dizeyi değiştirmek için yeniden kullanabileceğiniz özel bir işlev oluşturabilirsiniz.

İşte bir örnek.

Örnek

Tek tip bir formatta standartlaştırmak istediğiniz, çeşitli formatlardaki bir dizi telefon numarasını düşünün.

$phoneNumbers = @("(123) 456-7890", "123.456.7890", "123-456-7890", "1234567890")

function Normalize-PhoneNumber {
    param (
        [string]$number
    )
    # Remove non-numeric characters
    $number = $number -replace "\D", ""
    # Format as (XXX) XXX-XXXX
    return "({0}) {1}-{2}" -f $number.Substring(0,3), $number.Substring(3,3), $number.Substring(6)
}

# Normalize phone numbers
$phoneNumbers = $phoneNumbers.ForEach{ Normalize-PhoneNumber $_ }

$phoneNumbers

Normalize-PhoneNumber işlevi, telefon numarasındaki sayısal olmayan tüm karakterleri kaldırır ve onu standart bir şekilde biçimlendirir. Bu işlevin ForEach yöntemiyle kullanılması, dizideki tüm telefon numaralarının tutarlı bir şekilde normalleştirilmesini sağlar.

Çıkış :

(123) 456-7890
(123) 456-7890
(123) 456-7890
(123) 456-7890

Çözüm

PowerShell kullanarak bir dizideki birden çok dizeyi değiştirmek, -replace operatörü, Replace() yöntemi, hash tablosu veya özel işlevler gibi çeşitli yöntemlerle gerçekleştirilebilir.

Bu eğitimde, her yöntemi PowerShell'de bir dizideki birden çok dizenin nasıl değiştirileceği ile ilgili örneklerle açıkladım.

İlgili makaleler