de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 user2957157
user2957157
Question

Cara menggunakan operator ' -replace ' di PowerShell untuk mengganti string teks dengan karakter khusus dan berhasil diganti

Saya memiliki skrip di mana saya pada dasarnya melakukan pencarian dan penggantian pada beberapa string teks. Beberapa string pertama berfungsi, tetapi ketika saya melakukan kunci akun, mereka tidak berfungsi. Bagaimana saya bisa memperbaiki masalah ini?

Berikut adalah skripnya:

Get-ChildItem "[FILEPATH]" -recurse |
    Foreach-Object {
        $c = ($_ | Get-Content)
        $c = $c -replace 'abt7d9epp4','w2svuzf54f'
        $c = $c -replace 'AccountName=adtestnego','AccountName=zadtestnego'
        $c = $c -replace 'AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA=='
        [IO.File]::WriteAllText($_.FullName, ($c -join "`r`n"))
    }
22 2013-11-05T16:42:15+00:00 3
Peter Mortensen
Peter Mortensen
Pertanyaan edit 13 Juli 2015 в 1:41
Pemrograman
powershell
string
replace
Adil Hindistan
Adil Hindistan
5 November 2013 в 5:26
2013-11-05T17:26:58+00:00
Lebih
Sumber
Sunting
#22721104

'-replace' melakukan pencarian regex dan Anda memiliki karakter khusus di karakter terakhir (seperti +) Jadi Anda bisa menggunakan versi non-regex replace seperti ini:

$c = $c.replace('AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA==')
Adil Hindistan
Adil Hindistan
Jawaban edit 10 Maret 2014 в 6:00
46
0
 mjolinor
mjolinor
5 November 2013 в 5:44
2013-11-05T17:44:06+00:00
Lebih
Sumber
Sunting
#22721105

Jika Anda memiliki V3, Anda dapat memanfaatkan penghitungan otomatis, saklar -Raw di Get-Content, dan beberapa sintaksis kontiunasi baris baru untuk menyederhanakannya, dengan menggunakan metode string .replace() sebagai pengganti operator -replace:

(Get-ChildItem "[FILEPATH]" -recurse).FullName |
  Foreach-Object {
   (Get-Content $_ -Raw).
     Replace('abt7d9epp4','w2svuzf54f').
     Replace('AccountName=adtestnego','AccountName=zadtestnego').
     Replace('AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','AccountKey=DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA==') |
   Set-Content $_
  }

Menggunakan metode .replace() menggunakan string literal untuk argumen teks yang diganti (bukan regex), jadi Anda tidak perlu khawatir tentang escaping metacharacters regex dalam argumen teks yang akan diganti.

 mjolinor
mjolinor
Jawaban edit 5 November 2013 в 6:50
7
0
Anthony Neace
Anthony Neace
5 November 2013 в 4:46
2013-11-05T16:46:46+00:00
Lebih
Sumber
Sunting
#22721103

Dalam contoh Anda, Anda menambahkan string sumber Anda dengan AccountKey= tetapi bukan string target Anda.

$c = $c -replace 'AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','AccountKey=DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA=='

Dengan tidak memasukkannya ke dalam string target, string yang dihasilkan akan menghapus AccountKey= dan bukannya menggantinya. Anda melakukan ini dengan benar dengan contoh AccountName=, yang tampaknya mendukung kesimpulan ini karena tidak memberi Anda masalah. Jika Anda benar-benar bermaksud untuk menambahkannya, maka ini dapat menyelesaikan masalah Anda.

4
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 14 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
ID
JA
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi