【发布时间】:2020-02-05 04:46:30
【问题描述】:
在 Powershell 中,我需要在文本文件中查找多个错误以及它们之间最接近的所需单词。每个错误都包含在一个数组中。过去,我会使用代码:
#creating null array
$results = @("")
#creating index for array
for ($i = 0; $i -lt ($errors.length - 1); $i++)
{
$results += $false
}
#selecting string
for ($i = 0; $i -lt $errors.length; $i++)
{
$k = $errors[$i]
$rg = [regex]"WORD.*?$k.*?WORD"
$results[$i] = $content | Select-String -Pattern $rg -AllMatches | Foreach-Object {($_.Matches |
ForEach-Object {$_.value})}
}
$errors 是错误数组,$content 是文本文件的内容,$results 中的每一项都包含从所需单词到错误到所需单词的字符串。
使用$results[$i] = $content | Select-String -Pattern $rg -AllMatches | Foreach-Object {($_.Matches | ForEach-Object {$_.value})} 不起作用,因为我的错误包含星号等通配符。
我知道为了让我做这样的字符,我需要使用-like
我尝试过使用$results[$i] = $content -like $k,但它只返回一个空值。
【问题讨论】:
-
可以转义通配符和其他正则表达式特殊字符 -->
$k = [regex]::Escape($errors[$i]) -
初始化数组:[bool[]]$results = @( (,$false) * $errors.length )
-
您还可以为接受标准通配符的运算符转义 PowerShell 通配符 -->
[WildcardPattern]::Escape($errors[$i]).
标签: regex powershell