Saya memiliki nomor versi dalam file SQL yang perlu saya ganti melalui PowerShell. Dalam file itu terlihat seperti ini:
values
('Current', '15.7.1.0'),
('New', '15.7.22.0')
Saya perlu menggantinya dengan versi apa pun saat ini, tetapi karena fakta bahwa saya tidak tahu berapa nomor versi saat ini, saya juga tidak tahu panjang pastinya (jumlah digit dapat berubah karena angka nol di depan tidak digunakan), saya perlu menggunakan wildcard, dan apa yang saya coba tidak berfungsi.
Saat ini inilah yang saya coba:
$content = Get-Content C:\Users\user\Desktop\sql\file.sql
$newContent = $content -replace "'Current', '*'", "'Current', '$newVersion'"
Dan itu benar-benar menemukannya dan menggantikannya, tetapi tidak semuanya karena suatu alasan. Setelah menjalankan itu, yang saya dapatkan adalah:
values
('Current', '16.6.21.0'15.7.1.0'),
('New', '15.7.22.0')
Jadi itu pasti menemukan tempat yang benar dalam file dan mengganti beberapa di antaranya, tetapi tidak benar-benar mengganti nomor versi. Adakah yang bisa memberi tahu saya apa yang saya lakukan salah?
1 menjawab
Seperti yang dikatakan @PetSorAl, -replace
menggunakan wildcard bukan ekspresi reguler.
Di bawah ini adalah contoh berdasarkan Anda.
Contoh
$content = @"
values
('Current', '15.7.1.0'),
('New', '15.7.22.0')
"@
$newVersion = '16.6.21.0'
$newContent = $content -replace "'Current', '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'", "'Current', '$newVersion'"
Write-host $newContent
Hasil
values
('Current', '16.6.21.0'),
('New', '15.7.22.0')
-replace
gunakan ekspresi reguler bukan wildcard.'
s diikuti oleh satu'
. Karena kutipan tunggal pembuka memenuhi syarat (0'
s +'
), itu menggantikan seluruh string untuk kutipan pembuka.