如何在PowerShell中解析字符串

时间:2018-10-23 12:53:16

标签: string powershell parsing

我有一个Powershell命令,可以输出多行。

我只想输出包含.zip文件名称的一行。

当前,当找到子字符串InvalidationListener时,返回所有行:

.zip

1 个答案:

答案 0 :(得分:2)

由于您使用的是.ReadToEnd(),因此$output会收到一个一个多行字符串,而不是一个行数组。

因此,您必须使用-split运算符自己将该字符串分成几行。
然后,您可以将字符串比较运算符(例如-match-like直接应用于行数组以提取匹配的行:

# Sample multi-line string.
$output = @'
line 1
foo.zip
another line
'@

$output -split '\r?\n' -match '\.zip'  # -> 'foo.zip'
  • -split是基于正则表达式的,而正则表达式\r?\n可以匹配两种变体的换行符(换行符)(在Windows中通常使用CRLF,在Unix-中通常使用LF-平台)。

  • -match也是基于正则表达式的,这就是为什么.中的\.zip被转义的原因是\ regex元字符(默认情况下,它匹配LF以外的任何其他字符)。

    • 请注意,.与一般的PowerShell一样,默认情况下不区分大小写 ,因此-matchfoo.zip都将匹配;例如< br /> 如果您确实希望区分大小写,请使用foo.ZIP

顺便说一句:

我不知道您为什么要通过-cmatch实例运行命令,因为您似乎在捕获其标准流时正在同步调用。

PowerShell允许您通过直接调用(可以选择使用重定向)来更简单地完成此操作:

[System.Diagnostics.Process]