寻找PowerShell脚本,该脚本在文本文件中查找包含太多(或太少)标签的行。
我发现这个PowerShell脚本完全符合我的要求(差不多)。
这会计算每行标签的数量:
Get-Content test.txt | ForEach-Object {
($_ | Select-String `t -all).matches | Measure-Object | Select-Object count
}
有人可以扩展/修改/重写这个,只返回每行有多个或少于X个标签的行(行号)?
答案 0 :(得分:3)
在汇总到Get-Content
之前不要使用Select-String
,您将丢失有关每一行的相关信息。
相反,请将-Path
参数与Select-String
:
$Tabs = Select-String -Path .\test.txt -Pattern "`t" -AllMatches
$Tabs |Select-Object LineNumber,Line,@{Name='TabCount';Expression={ $_.Matches.Count }}
要仅返回标签数量大于$x
的广告,请使用Where-Object
:
$x = 3
$Tabs |Where-Object { $_.TabCount -ge $x} | Select-Object -ExpandProperty Line
如果您只想快速了解发布情况,还可以使用Group-Object
:
Get-Content .\test.txt | Group-Object { "{0} tabs" -f [regex]::Matches($_,"`t").Count }
答案 1 :(得分:0)
有很多方法可以做到这一点。 Get-Content
对我来说效果很好,我们创建了一个自定义对象,然后您可以根据需要进行过滤。
Get-Content test.txt | ForEach-Object{
New-Object PSObject -Property @{
Line = $_
LineNumber = $_.ReadCount
NumberofTabs = [regex]::matches($_,"`t").count
}
}
使用.net正则表达式方法计算返回的选项卡,并根据结果填充值。
NumberofTabs Number Line
------------ ------ ----
8 1 ;lkjasfdsa
8 2 asdfasdf
4 3 asdfasdfasdfa
2 4 fasdfjasdlfjas;l
现在,您可以根据需要使用PowerShell进行过滤。
} | Where-Object { $_.NumberofTabs -ne 4}
因此,如果4是完美数字,那么第3行将从结果中省略。