繁体   English   中英

如何在powershell中解析字符串

[英]How to parse string in powershell

我有一个输出多行的 Powershell 命令。

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

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

$p.Start() | Out-Null
$p.WaitForExit()
$output = $p.StandardOutput.ReadToEnd()
$output += $p.StandardError.ReadToEnd()
foreach($line in $output)
{  
  if($line.Contains(".zip"))
  {
     $line
  }
}

由于您使用的是.ReadToEnd() ,因此$output接收单个多行 string ,而不是行数组。

因此,您必须自己使用-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匹配任一变体的换行符(换行符)(CRLF,在 Windows 上是典型的,以及 LF,在类 Unix 平台上是典型的)。

  • -match也是基于正则表达式的,这就是为什么. \\.zip\\ -escaped,鉴于. 是一个正则表达式元字符(默认情况下它匹配除 LF 之外的任何字符)。

    • 请注意, -match与一般的 PowerShell 一样,默认情况下不区分大小写,因此foo.zipfoo.ZIP都会匹配,例如;
      如果您确实想要区分大小写,请使用-cmatch

作为旁白:

我想知道为什么您通过[System.Diagnostics.Process]实例运行您的命令,因为您似乎在捕获其标准流时同步调用。

PowerShell 允许您通过直接调用更简单地执行此操作,还可以选择重定向:

$output = ... 2>&1  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM