使用Select-String时忽略字符

时间:2018-09-05 16:29:45

标签: regex powershell select-string

我正在寻找文本文件中的一串特定字符;我用

Select-String -Path clm-server-test.txt -Pattern "#(S****)"

我只想获取与模式匹配的字符,但它还会返回该字符串前后的字符。

例如:

我有一个以

开头的注册集
S32145 thomas
S12345 bedro
S09867 stephane

使用Select-String命令让我显示所有S ***单词,而不是名字。

2 个答案:

答案 0 :(得分:3)

  • Select-String-Pattern参数默认期望regex (regular expression)进行搜索。

    • "#(S****)" 不是有效的正则表达式(它看起来更像是通配符表达式,只是您要使用?匹配一个字符)。

    • 要仅匹配以S开头且后跟5位数字的令牌,请使用S\d{5},或者要匹配任意数量的数字,请使用S\d+,如{{ 3}}建议。
      另外,您可以优化正则表达式以仅在单词边界(\b)上进行匹配:'\bS\d{5}\b'

  • Select-String不支持仅输出匹配行的 ,但是您可以通过进一步处理其输出的TheIncorrigible1实例来做到这一点。 / p>

将它们放在一起:

Select-String -Path clm-server-test.txt -Pattern '\bS\d{5}\b' | 
  ForEach-Object { $_.Matches[0].Value }

使用示例输入,将产生:

S32145
S12345
S09867 

顺便说一句:从上面的命令中可以明显看出,Select-String当前使仅提取输入行的匹配部分变得不容易。
如果您有兴趣引入简化此功能的开关,请[Microsoft.PowerShell.Commands.MatchInfo]

答案 1 :(得分:0)

感谢您的回答,也感谢您为使我更接近预期结果的命令,除了,我希望他回到我面前,以“ S ***”开头的单词到现在为止指出我想避免的所有事情。

我希望他能看到我的电话号码“ S7676583”

非常感谢您