PowerShell 中的所有替换方法

Marion Paul Kenneth Mendoza 2023年1月30日
  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