Yor*_*ubs 5 string console powershell
有人可以澄清与 grep 和 findstr 相比 sls (Select-String) 是如何工作的吗?
格雷普: grep <pattern> files.txt
sls:sls <pattern> files.txt
(sls 的默认参数位置是模式然后是文件)
grep的例子:grep "search text" *.log ; cat *.log | grep "search text"
SLS的例子:sls "search text" *.log;cat *.log | grep "search text"
顺便说一句,所有 PowerShell Cmdlet 都不区分大小写,不像 Linux 工具通常总是区分大小写,但也有像 findstr 这样的旧工具也区分大小写,但是 findstr 可以在 PowerShell 中使用,并且可以在 sls 不区分大小写的情况下工作,例如:(Get-Service | findstr "Sec"这没有问题!),但是当我们尝试以类似的方式使用 sls 时,Get-Service | sls "Sec"我们什么也没得到(大概这失败了,因为 sls 处理字符串,但 Get-Service 返回一个对象,所以这是可以理解的 - 但是findstr 在做什么,因为它可以将输出视为字符串?)。
因此,我的想法是“好的,我需要将 Get-Service 的输出转换为字符串以与 PowerShell Cmdlets 一起使用”,但这不起作用(或者不是我期望的方式):
Get-Service | Out-String | sls "Sec" (给出结果,但很奇怪)
(Get-Service).ToString() | sls "Sec" (.ToString() 只返回“System.Object[]”)
一般来说,我应该如何将一个对象转换为一个字符串,以便它可以操作信息(以同样的方式Get-Service | findstr "Sec"可以轻松地做到这一点)?
如果有人能澄清上面的内容如何组合在一起,以便我可以更多地使用 sls,我将不胜感激。特别是,Get-Service | Out-String | sls "Sec"确实返回了东西,而不是我期望的东西(它是否正在搜索“s”和“e”和“c”的每个字符,所以返回很多 - 如果在我看来,这将不是很直观) ?
Out-String默认情况下使用时,它会将管道输入对象(在本例中为服务对象数组)转换为单个字符串。幸运的是,该-Stream开关允许将每一行输出为单个字符串。关于区分大小写,Select-String支持-CaseSensitive切换。
# For case-insensitive regex match
Get-Service | Out-String -Stream | Select-String "Sec"
# For case-sensitive regex match
Get-Service | Out-String -Stream | Select-String "Sec" -CaseSensitive
# For case-sensitive non-regex match
Get-Service | Out-String -Stream | Select-String "Sec" -CaseSensitive -SimpleMatch
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,都Select-String使用正则表达式(使用-SimpleMatch开关进行字符串匹配)对每个输入字符串进行模式匹配,并输出与该模式匹配的整个字符串。因此,如果您只将一个包含多行的字符串插入其中,那么在成功匹配时将返回所有行。
| 归档时间: |
|
| 查看次数: |
2113 次 |
| 最近记录: |