[玩转系统] 如何使用PowerShell Replace来替换文本[示例]
作者:精品下载站 日期:2024-12-14 13:06:50 浏览:15 分类:玩电脑
如何使用PowerShell Replace来替换文本[示例]
与许多其他语言一样,PowerShell 可以处理字符串和文本。这些有用的功能之一是使用 PowerShell 替换文件内的字符、字符串甚至文本。
在本教程中,您将学习如何使用 PowerShell replace()
方法和 PowerShell replace
运算符。本教程将涵盖基础知识,甚至深入研究一些“有趣”的正则表达式!
在你开始之前
您不需要花太多时间就能理解本教程中的所有示例;你只需要 PowerShell。本教程示例将使用 PowerShell v7.0.2,但所有示例都应在 Windows PowerShell 中运行。
使用 PowerShell 替换字符串:基础知识
使用 PowerShell 替换的最简单的情况之一是替换字符串中的字符。让我们从一些例子开始。
假设 PowerShell 中有一个值为 hello, world
的字符串。
$string = 'hello, world'
您希望将该字符串中的字符串 hello
替换为字符串 hi
,以使 $string
变量的值为 嗨,世界。为此,PowerShell 首先需要找出“查找”文本的位置。一旦找到,它就会用用户定义的值替换该文本。
使用 Replace()
方法
在 PowerShell 中替换字符串的最简单方法之一是替换命令方法,如下所示。 replace()
方法有两个参数;要查找的字符串以及要替换找到的文本的字符串。
如下所示,PowerShell 正在查找字符串 hello
并用字符串 hi
替换该字符串。然后该方法返回最终结果,即 hi, world
。
PS> $string.replace('hello','hi')
hi, world
您可以对任何字符串调用 PowerShell 替换方法,以将任何文字字符串替换为另一个字符串。如果未找到要替换的字符串,则 replace()
方法不会返回任何内容。
您不需要将字符串分配给变量来替换字符串中的文本。相反,您可以直接在字符串上调用 replace()
方法,例如:'hello world'.replace('hello','hi')
。为了方便起见,本教程使用了变量。
删除字符
也许您想从另一个字符串中删除一个字符串中的字符,而不是用其他字符串替换它。您也可以通过指定空字符串来做到这一点。
PS> $string.replace('hello','')
, world
替换多个实例
现在您已经有了将一个字符串替换为另一个字符串的代码。替换多个字符串怎么样?没问题。
由于 PowerShell Replace 方法返回一个字符串,要替换另一个实例,您可以在末尾附加另一个 replace()
方法调用。然后,PowerShell 对原始输出调用 replace()
方法。
PS> $string.replace('hello','').replace('world','earth')
, earth
您可以根据需要将任意数量的 replace()
方法调用链接在一起,但如果您有许多字符串需要替换,则应考虑使用 replace
运算符。 >
使用 PowerShell 替换运算符
尽管使用 PowerShell 替换字符串方法是替换文本的最简单方法,但您也可以使用 PowerShell replace
运算符。 replace
运算符与提供要查找和替换的字符串的方法类似。但是,它有一个很大的优点:使用正则表达式 (regex) 查找匹配字符串的能力(稍后详细介绍)。
使用上面的示例,您可以使用 replace
运算符以类似的方式将 hello
替换为 hi
,如下所示。 PowerShell 执行相同的步骤。
PS> $string -replace 'hello','hi'
hi, world
删除字符
与 PowerShell 替换方法类似,您也可以使用 replace
运算符从字符串中删除字符。但是,与 replace()
方法不同,您也可以完全排除字符串作为替换参数,您会发现相同的效果。
PS> $string -replace 'hello',''
, world
PS> $string -replace 'hello'
, world
替换多个实例
与 replace()
方法一样,您也可以将 replace
运算符的用法链接在一起。由于 replace
运算符返回一个字符串,如下所示。您将在下一节中看到,使用正则表达式您的代码将变得更加干净。
PS> $string -replace 'hello','hi' -replace 'world','earth'
hi, earth
使用 PowerShell 正则表达式替换
如上所述,在 PowerShell 替换方法中替换字符串是可行的,但它是有限的。您只能使用文字字符串。您不能使用通配符或正则表达式。如果您要执行任何类型的中级或高级替换,则应使用 replace
运算符。
假设您有一个脚本,其中包含一个使用变量创建的字符串。该字符串应该是 hello, world
或 hi, world。
也许您作为系统管理员度过了糟糕的一天,并且想要将字符串更改为(无论值如何) 再见,世界
。
您需要将 hello, world
和 hi, world
都转换为 goodbye, world
。为了实现这一点,您需要使用正则表达式。您可以使用正则表达式匹配文本中的任何特定模式。
在此示例中,您可以使用表达式 hello|hi
来使用正则表达式“or”(|
) 字符来匹配两个必需的字符串,如下所示。
PS> 'hello, world' -replace 'hello|hi','goodbye'
goodbye, world
PS> 'hi, world' -replace 'hello|hi','goodbye'
goodbye, world
一旦您了解了如何使用正则表达式来查找字符串,您就可以使用 PowerShell 来替换与任何模式匹配的通配符字符串。
转义正则表达式字符
在上面的正则表达式示例中,要搜索的字符串不包含任何正则表达式特殊字符。正则表达式语言使用的某些字符不像大多数字母和数字那样按字面解释。
例如,也许您需要替换字符串中的文本。该字符串包含几个正则表达式特殊字符,例如括号和问号。然后,您尝试将字符串 [hello]
替换为 goodbye
,如下所示。
PS> '[hello], world' -replace '[hello]','goodbye'
[goodbyegoodbyegoodbyegoodbyegoodbye], wgoodbyergoodbyed
这显然不是你想要的。当您在字符串中使用正则表达式特殊字符来查找 ([hello]
) 时,就会发生这种情况。
为了避免这个问题,您有两种选择。您可以通过在每个字符前面添加反斜杠来转义这些特殊字符,也可以使用 Escape()
方法。
下面您可以看到用反斜杠转义每个特殊字符的效果。
PS> '[hello], world' -replace '\[hello\]','goodbye'
goodbye, world
或者,建议您使用正则表达式类型的 Escape()
方法自动删除所有特殊字符。
PS> '[hello], world' -replace ([regex]::Escape('[hello]')),'goodbye'
goodbye, world
您应该尽可能使用 Escape()
方法,因为它会转义所有特殊字符,这样您就不必记住它们。
使用匹配/捕获组
在前面的所有示例中,本教程一直使用文字字符串来替换另一个字符串。您一直在使用hi
或goodbye
。但是,如果您想使用 PowerShell 在字符串中找到的一个或多个字符来替换,该怎么办?您需要匹配或捕获组。
正则表达式有一个称为捕获组和反向引用的概念。捕获组允许您捕获字符串,然后在其他地方引用。 PowerShell 通过将匹配组与replace
运算符结合使用来利用此功能。
例如,也许您有一个可能包含几个不同值的字符串。
'hello world, you sexy beast'
'hi world, now go away'
'hello earth, you are lovely today'
您想将字符串的第一部分与第二部分交换,使它们看起来像这样:
'you sexy beast,hello world'
'now go away,hi world'
'you are lovely today,hello earth'
要执行此操作,PowerShell 必须找到逗号右侧和左侧的所有文本。一旦它知道该文本是什么,它就必须将其中一个替换为另一个。为此,您需要反向引用。
反向引用是一个正则表达式变量(不是 PowerShell 变量),表示正则表达式匹配的文本。 PowerShell 中的反向引用用美元符号表示,后跟一个数字,表示它们的匹配顺序。
您可以查看下面的示例。
## This string could also be:
## 'hi, world, now go away'
## 'hello, earth, you are lovely today'
PS> $string = 'hello, world, you sexy beast'
PS> $string -replace '(.*), (.*)','$2,$1'
you sexy beast,hello world
在上面的示例中,您可以看到正则表达式捕获组用括号将每个匹配项 (hello world
) 和 (you sexy bread
) 括起来。然后,对于替换,hello word
首先从左到右匹配,因此它获得 $1
反向引用标签,而 you sexy bread
获得 $2
反向引用标签。
一旦 PowerShell 知道每个匹配的值,您就可以按照您想要的方式在替换文本中使用这些引用。在此示例中,$2,$1
交换了它们的位置。
使用命名匹配组
如果您不想使用 $1
、$2
等数字占位符来引用匹配值,您也可以使用标签或名称。您不必从左到右计算哪些引用意味着什么,只需使用名称即可。
要使用名称作为引用,您需要首先为匹配字符串中的每个匹配定义标签。为此,您必须定义捕获组,如 (?)
,其中 label
是名称,<regex>
是您正在使用的正则表达式。
定义名称后,您可以使用美元符号并将名称括在大括号中,在替换字符串中引用它们,例如$ {标签}
。
您可以在下面看到该技术的演示。
PS> $string = 'hello, world, you sexy beast'
PS> $string -replace '(?<First_Part>.*), (?<Second_Part>.*)','${Second_Part},${First_Part}'
you sexy beast,hello, world
结论
正如您所了解的,PowerShell 替换运算符允许您以多种不同的方式替换字符、文本和字符串。要执行简单的替换,您可以使用 replace()
方法,但如果您需要匹配和替换更高级的内容,请始终使用 replace
运算符。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[短剧] 2025年05月31日 精选+付费短剧推荐58部
[软件合集] 25年5月31日 精选软件66个
[电影] 黄沙漫天(2025) 4K.EDRMAX.杜比全景声 / 4K杜比视界/杜比全景声
[风口福利] 短视频红利新风口!炬焰创作者平台重磅激励来袭
[韩剧] 宝物岛/宝藏岛/金银岛(2025)【全16集】【朴炯植/悬疑】
[电影] 愤怒的牦牛 (2025) 国语中字 4k
[短剧合集] 2025年05月30日 精选+付费短剧推荐56部
[软件合集] 25年5月30日 精选软件26个
[软件合集] 25年5月29日 精选软件18个
[短剧合集] 2025年05月28日 精选+付费短剧推荐38部
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag