匹配的图案和大小的字符串

时间:2016-01-28 12:20:04

标签: powershell select-string

我想在文本文件中搜索两个字符串。 仅当第一个字符串大于8个字符时才会打印输出。

这是我试图运行的命令:

Get-Content -Path .\std_server*.out | Select-String '((if "cpu=" -gt 8)|application=")' | out-File  -width 1024 .\test.txt

所以我想在文件std_server * .out中搜索CPU和APPLICATION两个值,但是我只想在CPU的值大于8个字符时打印这些值。

我该怎么做?

目前,我有一个与'(cpu = | application =“)'一起使用的基本版本,但是它打印出所有CPU的值,我只希望打印出应用程序当CPU是一个不合理的高值(CPU> 8)时。

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果他们在自己的线上可以使用类似

的东西
Get-Content -Path .\std_server*.out | ?{($_.StartsWith("CPU=") -And $_.Length -gt 12) -Or $_.StartsWith("Application=")} | out-File  -width 1024 .\test.txt

或者您可以检查结束字符(例如分号),例如

Get-Content -Path .\std_server*.out | ?{(($_.StartsWith("CPU=") -And $_.Length -gt 12) -Or $_.StartsWith("Application=")) -And $_.EndsWith(";")} | out-File  -width 1024 .\test.txt

或者只使用正则表达式,例如

Get-Content -Path .\std_server*.out | Select-String '^(cpu=\d{8,}|application=\d*)$' | out-File  -width 1024 .\test.txt

如果他们是自己的,或

Get-Content -Path .\std_server*.out | Select-String '(cpu=\d{8,}|application=\d*);' | out-File  -width 1024 .\test.txt

如果它们被一个角色分隔(在这种情况下是';')。

答案 1 :(得分:0)

使用if的嵌套逻辑将无法正常工作。您需要在application="之后匹配的字符的量词,以便在那里定义条件匹配。你可以测量一些后期处理的匹配,但是由于你必须解决Export-CSV次匹配,所以可能会引起更多的麻烦。

据推测,你的文件会在行的开头有这些字符串而没有其他内容跟随它们?为确保正确匹配,最好使用锚点。

此外,您可以使用Select-String使用正确的属性,因为$pattern = '^(cpu=.{8,}|application=".*)$' Get-Content -Path .\std_server*.out | Select-string -Path c:\temp\text.txt -Pattern $pattern | Select-Object Path,LineNumber,Line | Export-CSV -NoTypeInformation .\test.txt 返回匹配对象。

cpu=.{8,}

<a data-route="test" href="#!test">test</a> <iron-pages attr-for-selected="data-route" selected="{{route}}"> <section data-route="test">TEST</section> </iron-pages> 将按字面意思匹配“cpu =”,然后至少8个字符必须跟随它才能进行匹配。我们使用锚来确保从开始到结束的比赛正是我们想要的,仅此而已。

你的第一句和最后一句话对我来说是冲突的,但整个比赛可能是8个字符,所以也许你只想要4号。