PowerShell 在输出的时候会根据《ETS扩展类型系统》对对象进行格式化,而直接使用Select-String(sls)命令会先调用对象的ToString()方法再匹配,导致无法直接筛选出显示在屏幕上的内容:
PS C:\test> alias
CommandType Name
----------- ----
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias ac -> Add-Content
Alias cat -> Get-Content
...
PS C:\test> alias | sls cat
cat
PS C:\test> alias | sls Object
PS C:\test>(空)
解决办法来自于:https://stackoverflow.com/questions/1485215/powershell-how-to-grep-command-output
先使用Out-String -stream,再用sls即可:
PS C:\test> alias | Out-String -stream | sls Object
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias compare -> Compare-Object
Alias diff -> Compare-Object
Alias foreach -> ForEach-Object
Alias group -> Group-Object
Alias measure -> Measure-Object
Alias select -> Select-Object
Alias sort -> Sort-Object
Alias tee -> Tee-Object
Alias where -> Where-Object
另外注意sls使用的是正则pattern,必要的地方需要转义。
本文链接: https://www.pstips.net/powershell-%e5%ae%9e%e7%8e%b0-grep-%e7%9a%84%e6%95%88%e6%9e%9c.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!