我正在嘗試使用 PowerShell 用文本檔案中的引號替換文本 ($)
這是我正在嘗試的代碼,但沒有給出預期的結果:
$FilePath = "C:\PT\Test\"
Get-ChildItem $FilePath -Filter *.TXT | ForEach-Object {
(Get-Content $_.FullName) | Foreach-Object {
$_ -replace ',"$"', ',"$",'
} | Set-Content $_.FullName
}
uj5u.com熱心網友回復:
該-replace操作:
使用一個正則運算式的搜索模式的運算元,因此需要一個逐字
$被 轉義為\$在順序(未逸出被解釋為這樣$是一個正則運算式元字符表示的輸入字串的末尾)也
$用作替換運算元中的元字符,即指代正則運算式捕獲的文本 ($&) 或其部分(例如$1指代第一個捕獲組((...)) 捕獲的內容)。在這種情況下,將其轉義為$$.- 注意:在某些情況下,即使是未轉義的
$也可能有效,即如果與后續字符(如果有)組合,則不能將其解釋為占位符,例如$&或$1。然而,為了健壯性,最好逃避。
- 注意:在某些情況下,即使是未轉義的
因此,使用:
PS> ',"$"20' -replace ',"\$"', ',"$$",'
,"$",20
退一步:
正如Abraham Zinala 所建議的,對于逐字字串替換,.Replace()字串方法就足夠了,它的使用不需要轉義,并且啟動速度更快:
PS> ',"$"20'.Replace(',"$"', ',"$",')
,"$",20
警告:不像-replace,.Replace()是區分大小寫-總是在Windows PowerShell中,并默認在PowerShell中(核心)7 。
見這個答案對的詳細并列-replace和.Replace(),包括如何進行轉義-replace 編程。
為了把它放在一起,沿著與優化讀取每個檔案的完整,用Get-Content -Raw,為更快的處理(以避免附加一個結尾的新行,-NoNewLine則使用Set-Content):
$FilePath = "C:\PT\Test"
Get-ChildItem $FilePath -Filter *.TXT | ForEach-Object {
(Get-Content -Raw $_.FullName).Replace(',"$"', ',"$",') |
Set-Content -NoNewLine $_.FullName
}
uj5u.com熱心網友回復:
正如亞伯拉罕在他的評論中指出的那樣,這$是正則運算式中的一個保留字符,稱為Anchor,如果你想匹配一個文字$using-replace你需要轉義它: \$:
Get-ChildItem $FilePath -Filter *.TXT | ForEach-Object {
(Get-Content $_.FullName -Raw) -replace ',"\$"',',"$",' |
Set-Content $_.FullName
}
另一種選擇是使用.Replace(..)string 方法來匹配文字字符。
Get-ChildItem $FilePath -Filter *.TXT | ForEach-Object {
(Get-Content $_.FullName -Raw).Replace(',"$"',',"$",') |
Set-Content $_.FullName
}
通過查看您的代碼,您似乎想將其替換,"$"為,"$",,如果情況并非如此,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/389929.html
標籤:电源外壳 powershell-2.0 powershell-3.0 powershell-4.0
