0
点赞
收藏
分享

微信扫一扫

powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)


文章目录

  • ​​reference​​
  • ​​automatic variables reference​​
  • ​​special variable:`$_.`​​
  • ​​引用ls 的结果​​
  • ​​ls内容排序显示​​
  • ​​where​​
  • ​​获取属性的完整值​​
  • ​​表达式中的模糊字符(通配字符串)​​
  • ​​使用-like参数​​
  • ​​自带筛选器的cmdlet​​

  • ​​select-string​​
  • ​​多目录多文件中搜索​​
  • ​​在管道符中使用sls​​
  • ​​grep​​

reference

​​link​​

automatic variables reference

​​about Automatic Variables - PowerShell | Microsoft Docs​​

special variable:​​$_.​

​​reference link​​

Get-Process | ForEach-Object {$_.ProcessName}

​$_​​​往往不能够单独使用,配合forEach或where是常用的
对于管道符,表达式这可以作为管道符的第一个元素(即管道符左侧)管道右侧,需要以某个命令开头,该命令的参数放可以是表达式(所以,像如下命令不可以正常运行正是首先于管道符的使用规则.
powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_筛选器

引用ls 的结果

既然直接从管道符后面引用​​$_​​​不那么如意,我们可以用一个变量去接受ls的返回结果,然后再对这个变量执行一些操作(例如访问对象的某些属性/方法)
powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_pwsh_02
powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_筛选器_03

powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_搜索_04
powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_pwsh_05

powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_搜索_06

ls内容排序显示

例如按访问时间

ls * | sort {$_.LastaccessTime}

powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_搜索_07

where

​where​​​ & ​​$_​

​$_​​​经常使用在管道符中,作为前一个变量的输出对象来作为下一个命令的输入(您可以从中提取需要的属性完成一定的逻辑)
譬如,在作为筛选工具对象的​​​where-object​​​的值表达式中经常会用的​​$_​

Get-Process | Where-Object {$_.ProcessName -eq dllhost}

为了提取合适的字段,您或许需要利用其他cmdlet(​​format-list​​​(简写为​​fl​​​)/​​get-member​​​(​​gm​​)来获取准确的字段.

获取属性的完整值

  • ​format-table​​​(​​ft​​)可以获取变量的简写值
  • ​format-list​​​(​​fl​​)可以获取变量的完整值
  • 例如
    ​​​gdr|select -First 3| fl​​​powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_筛选器_08
  • ​select​​ 也可以获取指定变量的完整的值
  • 例如
    powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_microsoft_09

表达式中的模糊字符(通配字符串)

使用-like参数

​​about Wildcards - PowerShell | Microsoft Docs​​ 这可以让where命令更加好用

应用实例:
powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_microsoft_10

自带筛选器的cmdlet

某些cmdlet自带筛选器,自带筛器一般具有更好的性能

SYNOPSIS
Selects objects from a collection based on their property values.


--------------- Example 1: Get stopped services ---------------

Get-Service | Where-Object {$_.Status -eq "Stopped"}
Get-Service | where Status -eq "Stopped"


-------- Example 2: Get processes based on working set --------

Get-Process | Where-Object {$_.WorkingSet -GT 250MB}
Get-Process | Where-Object WorkingSet -GT (250MB)


-------- Example 3: Get processes based on process name --------

Get-Process | Where-Object {$_.ProcessName -Match "^p.*"}
Get-Process | Where-Object ProcessName -Match "^p.*"

除了​​$_​​​可以帮助用来构建脚本块表达式来辅助where 执行筛选
还有​​​select-string​​这个十分有用的cmdlet

select-string

缩写别名为​​sls​

​​Select-String (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Docs​​

​​reference link2​​ 实例代码:

生成演示素材文件:`Alias.txt` /`Command.txt`
Get-Alias | Out-File -FilePath .\Alias.txt
Get-Command | Out-File -FilePath .\Command.txt
# 利用sls进行多文件同时查找
Select-String -Path .\*.txt -Pattern 'File'

处理从文件中刷选满足条件的行,也可以通过管道符来使用​​sls​​​ sls相比于​​where​​更加灵活,也更加强大

多目录多文件中搜索

powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_搜索_11

在管道符中使用sls

powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_pwsh_12
在管道符表达式中,管道符前的结果将默认作为​​​sls​​​的第一个参数(但是最好带上参数来指明各个​​值​​​的含义
​​​ls |sls -Pattern "<your Match pattern string>"​

某种程度上进一步实现了​​grep​​的一些效果.

grep

​grep​​​是基于文本流的筛选工具
只需要考虑文本正则表达式的编写即可使用
但是在某些时候grep很管用(很方便)
在powershell中,可以通过安装第三方工具实现grep(当然用法于Linux上的有所区别
(可以通过​​​scoop​​搜索相关工具并安装)

PS C:\Users\cxxu_11> scoop search grep
'main' bucket:
busybox (4487-gd239d2d52) --> includes 'egrep'
gettext (0.21-v1.16) --> includes 'msggrep.exe'
gow (0.8.0) --> includes 'egrep.exe'
grep (2.5.4)
nim (1.6.0) --> includes 'nimgrep.exe'
pcregrep (10.20)
ripgrep (13.0.0)
rktools2k3 (1.0) --> includes 'qgrep.exe'
ugrep (3.3.8)
unxutils (2007.03.01) --> includes 'agrep.exe'

例如,可以安装第一个工具箱,内部就包含有grep工具

PS C:\Users\cxxu_11> printenv | grep apps -i

CPwindowsApps=C:\Program Files\windowsApps
oneNote10Home=C:\Program Files\windowsApps\Microsoft.Office.OneNote_16001.14326.20458.0_x64__8wekyb3d8bbwe
Path=D:\Program Files\PowerShell\7;C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.9.1942.0_x64__8wekyb3d8bbwe;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;

powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_筛选器_13
powershell_特殊变量:$_ /ls 目录内文件列表排序显示 / where vs sls(select-string) vs grep/表达式中的模糊字符(通配字符串)_搜索_14


举报

相关推荐

0 条评论