当我使用 select-string
时,我几乎总是希望我的输出对齐,即文件名、行号和找到的文本都应该对齐到列中。从视觉上看,它不那么分散注意力,通常更容易发现差异。作为一个简单的例子,我在中间文件中注入(inject)了一个额外的空间:
PS> Get-ChildItem *.cs | Select-StringAligned -pattern override
---
FileWithQuiteALengthyName.cs : 34: protected override void Foo()
ShortName.cs : 46: protected override void Bar()
MediumNameFileHere.cs :123: protected override void Baz()
---
不幸的是,
Select-String
没有这样做;实际上它提供了这个——你能发现这里的额外空间吗?PS> Get-ChildItem *.cs | Select-String -pattern override
---
FileWithQuiteALengthyName.cs:34: protected override void Foo()
ShortName.cs:46: protected override void Bar()
MediumNameFileHere.cs:123: protected override void Baz()
---
有没有办法强制
Select-String
对齐其输出列?编辑:
哎呀!我忘记了一个重要的部分:如果可能的话,我还想包括
-Context
参数,这样人们就可以在比赛前后获得任意数量的行。 最佳答案
使用对象:
Get-ChildItem *.cs | select-string -pattern override |
select Filename,LineNumber,Line | Format-Table -AutoSize
如果您决定要保留它,它也适合导出到 csv。
添加该要求以便还能够使用上下文会使事情变得相当复杂。
function ssalign {
begin {$display = @()}
process {
$_ -split "`n" |
foreach {
$display +=
$_ | New-PSObjectFromMatches -Pattern '^(.+)?:([\d]+):(.+)' -Property $null,File,Line,Text
}
}
end {
$display |
foreach {$_.line = ':{0,5}:' -f $_.line}
$display | ft -AutoSize -HideTableHeaders
}
}
Get-ChildItem *.cs | Select-StringAligned -pattern override | ssalign
在此处获取 New-PSObjectFromMatches 函数:
http://gallery.technet.microsoft.com/scriptcenter/New-PSObjectFromMatches-87d8ce87
关于powershell - 在 PowerShell 中对齐 Select-String 的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15443277/