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?

2
user3066571 8 Juni 2016, 18:21
2
-replace gunakan ekspresi reguler bukan wildcard.
 – 
user4003407
8 Juni 2016, 18:47
Anda mengganti persis apa yang Anda tentukan: 0 atau lebih 's diikuti oleh satu '. Karena kutipan tunggal pembuka memenuhi syarat (0 's + '), itu menggantikan seluruh string untuk kutipan pembuka.
 – 
Axeman
8 Juni 2016, 21:05

1 menjawab

Jawaban Terbaik

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')
2
TravisEz13 8 Juni 2016, 19:05