使用选择字符串时忽略字符



>我在文本文件中查找特定字符的字符串;我使用

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

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

例如:

我有一个以

S32145 thomas
S12345 bedro
S09867 stephane

使用Select-String命令,我希望它向我显示所有S ***单词,而不是名称。

默认情况下,
  • Select-String-Pattern参数需要搜索正则表达式(正则表达式(。

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

    • 要仅匹配以S开头后跟 5 位数字的令牌,请使用Sd{5},或者,要匹配任意数量的数字,请使用Sd+,如 TheIncorrigible1 所建议的那样。
      此外,您可以优化正则表达式以仅在单词边界 (b(:'bSd{5}b'

  • Select-String不支持输出行的匹配部分,但您可以通过进一步处理它输出的[Microsoft.PowerShell.Commands.MatchInfo]实例来实现。

总而言之:

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

使用您的示例输入,这将产生:

S32145
S12345
S09867 

顺便说一句:从上面的命令中可以看出,Select-String目前并不容易提取输入行的匹配部分。
如果您有兴趣引入一个开关来简化此操作,请参与 GitHub 上的讨论。

感谢您的回答,事实上,感谢您的命令,以使我更接近预期的结果,除此之外,我希望他回到我身边,以"S ***"开头的单词直到现在都指向我想避免的所有事情。

我想让他看到我的数字"S7676583">

非常感谢

相关内容

  • 没有找到相关文章

最新更新