>我在文本文件中查找特定字符的字符串;我使用
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">
非常感谢