我不是PowerShell的专家。我正在尝试在文件中搜索多行字符串,但没有得到想要的结果。
这是我的代码:
$search_string = @("This is the first line`nThis is the second line`nThis is the third line")
$file_path = "log.txt"
$ret_string = @(Get-Content -Path $file_path | Where-Object{$_.Contains($search_string)}).Count
Write-Host $ret_string
$ret_string
设置为0
,尽管"log.txt"
包含与$search_string
完全相同的内容。
答案 0 :(得分:4)
这里有几个问题:
\r\n
作为新行.Contains
函数将返回布尔值,因此不会帮助您获取计数$search_string
不必是数组您可以使用-Raw
参数以字符串的形式获取整个文件的内容。您也最好使用正则表达式在此处搜索。试试:
$search_string = "This is the first line`r`nThis is the second line`r`nThis is the third line"
$file_path = "log.txt"
$ret_string = (Get-Content -raw -Path $file_path | Select-String $search_string -AllMatches | % { $_.matches}).count
这将返回文件中所有$search_string
出现次数的计数
答案 1 :(得分:3)
Get-Content
返回一个字符串数组(每行一个),在您的Where-Object
条件下分别检查每个字符串。您需要以单个字符串形式读取文件,以使检查工作正常:
Get-Content $file_path | Out-String | Where-Object { ... }
在PowerShell v3或更高版本上,该cmdlet具有用于读取原始文件的参数:
Get-Content $file_path -Raw | Where-Object { ... }
但是,请注意,您可能需要调整条件以检查`r`n
而不是`n
,尤其是第一种方法。