我需要计算包含反斜杠和双反斜杠的字符串在一行中出现的次数。
我尝试使用.Count
,但是它仅计算该行中的第一个实例。当我尝试其他命令时,通常会遇到一些有关转义符的错误。
这是文件c:\ work \ test.txt中的一行数据:
Occurrence1\\paul\dfs_app\MyFolder\QA2\testme1 Occurrence2\\paul\dfs_app\MyFolder\QA2\testme2
这是我的代码:
$inString = "\\paul\dfs_app\MyFolder\QA2"
$file = "C:\work\test.txt"
$check = Get-Content $file | Where-Object { $_.Contains($inString) }
if ($check.Count -gt 0) {
Write-Host "Found" $check.Count.ToString().PadLeft(2, " ") "occurrences in " $file -ForegroundColor Yellow
}
返回
在C:\ work \ test.txt中发现1个出现
但它应该已经发现2次。
答案 0 :(得分:2)
您可以使用Select-String
来统计$inString
的出现。
$out = Select-String -Path $file -Pattern ([regex]::Escape($inString)) -AllMatches
$out.Matches.Count
没有-Pattern
开关的 -SimpleMatch
会将模式转换为正则表达式。使用Escape()
方法将自动转义那些反斜杠和任何其他特殊的正则表达式字符。由于它使用的是正则表达式而不是简单的匹配,因此matches
属性将包含找到的每个匹配项。结合使用AllMatches
参数,它将在每行的第一个匹配项之后继续进行匹配项搜索。