匹配的模式和大小字符串



我想在文本文件中搜索两个字符串。仅当第一个字符串大于 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)时打印出应用程序。

提前谢谢。

带有 if 的嵌套逻辑不会像你所看到的那样工作。您需要为cpu=后匹配的字符提供一个量词,以便在那里定义条件匹配。您也可以通过一些后期处理来衡量匹配,但这可能会带来更多麻烦,因为您还必须解决application="匹配。

大概您的文件会在行首包含这些字符串,而它们后面没有其他内容?为了确保正确的匹配,最好使用锚点。

此外,您也可以将Export-CSV与正确的属性一起使用Select-String因为返回匹配对象。

$pattern = '^(cpu=.{8,}|application=".*)$'
Get-Content -Path .std_server*.out | 
        Select-string -Path  c:temptext.txt -Pattern $pattern | 
        Select-Object Path,LineNumber,Line | 
        Export-CSV -NoTypeInformation .test.txt

cpu=.{8,}将从字面上匹配"cpu=",然后至少必须遵循 8 个字符才能匹配。我们使用锚点来确保从比赛的开始到结束都是我们想要的,仅此而已。

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

如果他们在自己的行上,可以使用类似的东西

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

如果它们由字符分隔(在本例中为";")。

相关内容

  • 没有找到相关文章

最新更新