首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PowerShell sls (String) vs grep vs findstr

使用PowerShell sls (String) vs grep vs findstr
EN

Stack Overflow用户
提问于 2019-12-07 19:33:43
回答 1查看 4.6K关注 0票数 8

有人能澄清sls (Select)与grep和findstr相比是如何工作的吗?

grep:grep <pattern> files.txt

sls:sls <pattern> files.txt ( sls的默认参数位置是模式,然后是文件)

grep示例:grep "search text" *.logcat *.log | grep "search text"

sls示例:sls "search text" *.logcat *.log | grep "search text"

顺便说一句,所有的PowerShell Cmdlet都是不区分大小写的,不像Linux工具通常总是区分大小写,但也可以使用区分大小写的旧工具,但是findstr也可以在PowerShell中使用,并且可以在sls不起作用的情况下工作,例如:Get-Service | findstr "Sec" (这没有问题!),但是当我们试图以类似的方式使用Get-Service | sls "Sec"时,我们什么也得不到(大概是因为sls与字符串一起工作,但是get -服务返回一个对象,所以这是可以理解的,但是findstr在这样的情况下可以将输出看作字符串呢?)

因此,我的想法是“好的,我需要将Get的输出转换成一个字符串来使用PowerShell Cmdlet”,但是这是行不通的(或者不是我所期望的那样):

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“的每个字符吗?在我看来,这不是很直观的吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-07 20:56:30

默认情况下使用Out-String时,它会将管道输入对象(在本例中是服务对象数组)转换为单个字符串。幸运的是,-Stream开关允许将每一行作为单个字符串输出。关于区分大小写的问题,Select-String支持-CaseSensitive交换机.

代码语言:javascript
复制
# 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

在这两种情况下,Select-String使用regex (使用-SimpleMatch开关进行字符串匹配)对每个输入字符串进行模式匹配,并输出匹配模式的整个字符串。因此,如果您只输入一个多行的字符串,那么所有的行都会在成功的匹配中返回。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59229488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档