PowerShell 中的所有替换方法
-
PowerShell 中的
replace()
方法简介 -
在 PowerShell 中使用
replace()
方法 - 在 PowerShell 中移除字符
- 在 PowerShell 中替换多个实例
- 在 PowerShell 中使用替换操作符
- 在 PowerShell 中移除字符
- 在 PowerShell 中替换多个实例
- 在 PowerShell 中使用正则表达式替换字符串
- 在 PowerShell 中转义正则表达式字符

Windows PowerShell 可以像许多其他语言一样处理文本和字符串。这个有价值的特性之一是使用 Windows PowerShell 替换字符、字符串甚至文件中的文本。
本文将讨论使用不同的 PowerShell 替换方法替换或删除字符、文本和单词。
PowerShell 中的 replace()
方法简介
我们可以使用 Windows PowerShell 替换字符串中的字符。例如,创建一个数据类型为字符串的 PowerShell 变量,我们将在整个文章中使用这个变量。
$string = 'hello, world'
我们希望将字符串中的 hello
单词替换为 hi
单词,使 $string
变量的值为 hi, world
。
为此,Windows PowerShell 需要弄清楚在哪里找到文本的特定部分,一旦找到,它将该文本的部分替换为用户提供的值。
在 PowerShell 中使用 replace()
方法
在 Windows PowerShell 中,替换字符串的最方便方法之一是使用 replace()
方法。replace()
方法接受两个参数。
- 要查找的字符串。
- 要替换找到的文本的字符串。
如下所示,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 中使用正则表达式替换字符串
在 PowerShell 中用 replace()
替换字符串是有限制的。我们只能使用字面字符串。
我们不能使用通配符或正则表达式。如果你执行中级或高级操作,我们应该使用替换操作符。
我们有一个包含通过变量创建的字符串的脚本。我们想将字符串更改为 goodbye, world
,而不考虑值。
这将帮助将 hello, world
和 hi, world
变成 goodbye, world
。我们需要使用正则表达式并匹配任何特定模式,以便实现这一点。
在此示例中,我们可以使用表达式 hello|hi
来匹配两个所需的字符串,使用 regex "或"
操作符或管道符号(|
)。
代码:
'hello, world' -replace 'hello|hi', 'goodbye'
'hi, world' -replace 'hello|hi', 'goodbye'
输出:
goodbye, world
goodbye, world
一旦我们学会如何使用 regex 查找字符串,我们可以使用 PowerShell 替换匹配任何模式的通配符字符串。
在 PowerShell 中转义正则表达式字符
在上面的正则表达式示例中,要搜索的字符串不包含任何特殊的正则表达式字符。然而,正则表达式语言具有某些字符,其解释方式与大多数字母和数字不同。
例如,也许我们需要替换字符串中的文本。该字符串包含几个特殊的正则表达式字符,如括号和问号。
然后,我们尝试将字符串 [hello]
替换为 goodbye
。
代码:
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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn