PowerShell 中的所有替換方法

Marion Paul Kenneth Mendoza 2023年1月30日 2022年5月14日
  1. PowerShell 中的 replace() 方法簡介
  2. 在 PowerShell 中使用 replace() 方法
  3. 在 PowerShell 中刪除字元
  4. 在 PowerShell 中替換多個例項
  5. 在 PowerShell 中使用替換運算子
  6. 在 PowerShell 中刪除字元
  7. 在 PowerShell 中替換多個例項
  8. 在 PowerShell 中使用正規表示式替換字串
  9. 在 PowerShell 中轉義正規表示式字元
PowerShell 中的所有替換方法

與許多其他語言一樣,Windows PowerShell 可以處理文字和字串。其中一項有價值的功能是使用 Windows PowerShell 替換檔案中的字元、字串甚至文字。

本文將討論使用不同的 PowerShell 替換方法替換或刪除字元、文字和單詞。

PowerShell 中的 replace() 方法簡介

我們可以使用 Windows PowerShell 來替換字串中的字元。例如,使用我們將在本文中使用的資料型別字串建立一個 PowerShell 變數。

$string = 'hello, world'

我們想用 hi 詞替換字串中的 hello 詞,以使 $string 變數的值為 hi, world

要執行此操作,Windows PowerShell 需要找出在哪裡可以找到文字的特定部分,一旦找到,它就會用使用者提供的值替換該部分文字。

在 PowerShell 中使用 replace() 方法

在 Windows PowerShell 中替換字串的最方便的方法之一是使用 replace() 方法。replace() 方法接受兩個引數。

  1. 要查詢的字串。
  2. 替換找到的文字的字串。

正如我們在下面看到的,Windows PowerShell 找到單詞 hello 並將其替換為字串 hi。該方法返回最終結果 hi, world

讓我們以我們之前建立的 $string 變數為例。

程式碼:

$string.replace('hello','hi')

輸出:

hi, world

我們可以在任何字元上呼叫 replace() 方法來用另一個字串替換任何文字字串。如果沒有找到要替換的字串,replace() 方法不返回任何內容。

此外,我們不需要將字串分配給變數來替換字串中的文字。相反,我們可以直接在字串上呼叫 replace() 方法。

程式碼:

'hello world'.replace('hello','hi')

在 PowerShell 中刪除字元

也許我們需要從另一個字串中刪除文字中的字元,而不是用其他東西替換它。我們也可以通過指定一個空字串來做到這一點。

程式碼:

$string.replace('hello','')

輸出:

, world

在 PowerShell 中替換多個例項

由於 replace() 方法返回一個字串資料型別的值,要替換另一個例項,我們可以在末尾連線並附加另一個 replace() 方法呼叫。然後 Windows PowerShell 在實際輸出中呼叫 replace() 方法。

程式碼:

$string.replace('hello','').replace('world','earth')

輸出:

, earth

我們可以根據需要將儘可能多的 replace() 方法呼叫連結在一起,但是如果我們有多個要替換的字串,我們應該考慮使用替換運算子。

在 PowerShell 中使用替換運算子

我們還可以使用 Windows PowerShell 的替換運算子來替換文字。替換操作符類似於我們提供一個字串來查詢和替換的方法。

但是,它有一個顯著的優勢:使用正規表示式 (regex) 來查詢匹配的字串。使用前面的示例,我們可以類似地使用替換運算子將 hello 替換為 hi,如下所示。

程式碼:

$string -replace 'hello','hi'

輸出:

hi, world

在 PowerShell 中刪除字元

replace() 方法一樣,我們也可以使用替換運算子從字串中刪除字元。與 replace() 方法不同,我們也可以完全排除字串作為要替換的引數,你會發現相同的效果。

程式碼:

$string -replace 'hello',''
$string -replace 'hello'

輸出:

, world
, world

在 PowerShell 中替換多個例項

我們還可以將替換運算子的用法連結在一起。

程式碼:

$string -replace 'hello','hi' -replace 'world','earth'

輸出:

hi, earth

在 PowerShell 中使用正規表示式替換字串

replace() 替換 PowerShell 中的字串是有限的。我們只能使用文字字串。

我們不能使用萬用字元或正規表示式。如果你正在執行中級或高階,我們應該使用替換運算子。

我們有一個指令碼,其中包含一個用變數建立的字串。無論值如何,我們都希望將字串更改為 goodbye, world

這將有助於將你好,世界你好,世界轉換為再見,世界。我們需要使用正規表示式並將文字中的任何特定模式與正規表示式匹配以實現這一點。

在這個例子中,我們可以使用表示式 hello|hi 使用正規表示式 "or" 運算子或管道 (|) 字元來匹配兩個所需的字串。

程式碼:

'hello, world' -replace 'hello|hi','goodbye'
'hi, world' -replace 'hello|hi','goodbye'

輸出:

goodbye, world
goodbye, world

一旦我們學會了如何使用正規表示式來查詢字串,我們就可以使用 PowerShell 替換匹配任何模式的萬用字元字串。

在 PowerShell 中轉義正規表示式字元

在上面的正規表示式示例中,要搜尋的字串不包含任何特殊的正規表示式字元。但是,正規表示式語言使用的某些字元不像大多數字母和數字那樣按字面解釋。

例如,也許我們需要替換字串中的文字。該字串包含幾個特殊的正規表示式字元,如括號和問號。

然後我們嘗試用 goodbye 替換字串 [hello]

程式碼:

PS> '[hello], world' -replace '[hello]','goodbye'

輸出:

[goodbyegoodbyegoodbyegoodbyegoodbye], wgoodbyergoodbyed

這不是我們想要的。當我們在字串中使用特殊的正規表示式字元來查詢 ([hello]) 時,就會發生這種情況。

為了避免這個問題,我們可以通過在每個字元前面加上反斜槓或使用 Escape() 方法來轉義這些特殊字元。下面我們可以看到用反斜槓轉義每個特殊字元的效果。

程式碼:

'[hello], world' -replace '\[hello\]','goodbye'

輸出:

goodbye, world

或者,我們可以使用正規表示式型別的 Escape() 方法自動刪除所有特殊字元。

程式碼:

'[hello], world' -replace ([regex]::Escape('[hello]')),'goodbye'

輸出:

goodbye, world

我們應該使用 Escape() 方法,因為它會轉義所有特殊字元,我們不必記住它們。

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn