加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PowerShell正则表达式如何使用多行字符串?

发布时间:2020-12-14 06:26:33 所属栏目:百科 来源:网络整理
导读:好吧,这让我疯了,因为我的正则表达式正在研究Rubular,但Power Shell并没有像我期望的那样工作. 我在网络目录上执行了Get-ChildItem,然后将输出定向到txt文件. 我从文本文件中删除了目录信息,如下所示: 当我使用PowerShell尝试编写正则表达式来删除目录信息
好吧,这让我疯了,因为我的正则表达式正在研究Rubular,但Power Shell并没有像我期望的那样工作.

>我在网络目录上执行了Get-ChildItem,然后将输出定向到txt文件.
>我从文本文件中删除了目录信息,如下所示:

>当我使用PowerShell尝试编写正则表达式来删除目录信息时,我遇到了一些问题.

我用的时候:

$var = Get-Contnet "file path"
$var -match "Directory.*"

PowerShell抓取我正在寻找的文本,但它没有抓住从新行开始的文本,我得到:

Directory: DriveUnitProposalsNamesLocationcrazy folder patheven crazier folder pathunbelievable folder path

所以…当我使用时:

$var -match "Directory.*n.*"

我一无所获……

当我在Rublar上尝试这个时它工作正常,我在这里缺少什么?任何帮助都会很棒,谢谢!

Filburt的答案很好,并且它看起来不像正则表达式是这里使用的最佳工具.然而,你遇到了一个可能在未来再次引起混淆的问题.这里的问题是您使用Get-Content填充的变量不是多行字符串.它是一个字符串数组:
$var = Get-Content "file path"
$var.GetType() # Shows 'Object[]'

当你对$var运行正则表达式匹配时,它会分别匹配数组中的每个对象(文件中的每一行).它不能匹配超过一行的结尾,因为下一行是一个新对象.

这里的一个解决方法是将该字符串数组展平为单个字符串,如下所示:

$var = (Get-Content "file path" | Out-String)
$var.GetType() # Shows 'String' now

在Powershell中,当你处理单个String对象和一个字符串数组时,有时候很难说.如果将它们输出到控制台,它们看起来是相同的.在这些情况下,GetType()和Out-String可以是有用的工具.

编辑:从Powershell 3.0开始,文件系统提供程序包含一个用于Get-Content的-Raw开关.该开关指示Get-Content一次性读取文件而不将其拆分为块.它比使用Out-String解决方法要快得多,因为它不会浪费时间将片断分开,只是为了将它们重新组合在一起.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读