[英]How to parse and convert JSON Into custom string in 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.zip
和foo.ZIP
都会匹配,例如;-cmatch
。作为旁白:
我想知道为什么您通过[System.Diagnostics.Process]
实例运行您的命令,因为您似乎在捕获其标准流时同步调用。
PowerShell 允许您通过直接调用更简单地执行此操作,还可以选择重定向:
$output = ... 2>&1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.