我正在寻找文本文件中的一串特定字符;我用
Select-String -Path clm-server-test.txt -Pattern "#(S****)"
我只想获取与模式匹配的字符,但它还会返回该字符串前后的字符。
例如:
我有一个以
开头的注册集S32145 thomas
S12345 bedro
S09867 stephane
使用Select-String
命令让我显示所有S ***
单词,而不是名字。
答案 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”
非常感谢您