cat*_*lin 0 regex powershell numbers
我只需从外部文件中提取数字.我使用以下命令:
(Get-Content -Path .\log.html) | Select-String -Pattern 'load is'
Run Code Online (Sandbox Code Playgroud)
然后返回:
<tr><td>server-67 load is: 0</td></tr>
<tr><td>server-68 load is: 5875</td></tr>
<tr><td>server-69 load is: 6077</td></tr>
<tr><td>server-70 load is: 6072</td></tr>
<tr><td>server-71 load is: 5846</td></tr>
<tr><td>server-72 load is: 1900</td></tr>
<tr><td>server-73 load is: 1900</td></tr>
Run Code Online (Sandbox Code Playgroud)
我只需要提取数字部分.我该怎么做?
这个问题与" 在PowerShell中我选择字符串(grep)时如何仅返回匹配的正则表达式? "中的近似重复区别的是希望通过不包括在内的内联上下文提取感兴趣的子字符串在比赛中:
PS> Select-String '(?<=load is: )\d+' .\log.html | ForEach-Object { $_.Matches[0].Value }
0
5875
6077
6072
5846
1900
1900
Run Code Online (Sandbox Code Playgroud)
如果要输出实际数字,只需将[int](例如)放置$_.Matches[0].Value(转换)文本结果为整数.
Select-String可以直接接受文件路径,因此对于单个文件或通配符表达式匹配的一组文件,通常不需要进行管道传输Get-Content.
(用于处理整个目录子树,来自管道Get-ChildItem -File -Recurse).
'(?<=load is: )\d+' 正则(?<=...)表达式使用(正)lookbehind断言()来匹配每一行的一部分,而不包括结果中匹配的内容; 只\d+捕获了一部分 - 一个非空的数字运行.
Select-String输出[Microsoft.PowerShell.Commands.MatchInfo]其.Matches属性包含正则表达式匹配操作结果的实例; 它的.Value属性包含正则表达式捕获的内容.
在目前的情况下,外观解决方案可能是最简单的,但另一种解决方案是使用捕获组,这最终会更灵活:
# Same output as above.
Select-String 'load is: (\d+)' .\log.html | ForEach-Object {$_.Matches[0].Groups[1].Value}
Run Code Online (Sandbox Code Playgroud)
捕获组(括号内的子表达式(...))匹配的内容在输出对象的.Matches.Groups集合上是可用的,其索引处的元素0包含整体匹配,元素1包含第一个捕获组,2第二个,依此类推.
| 归档时间: |
|
| 查看次数: |
1926 次 |
| 最近记录: |