是否等待"休息"来自powershell的Get-Content的等待循环?
Get-Content "$PSScriptRoot\out.txt" -Wait
out.txt
有一定数量的行被写入,我想在到达结束时停止循环。
到目前为止,我需要用" ctrl + c"发送信号。完成。
在伪代码中,类似于
Get-Content "$PSScriptRoot\out.txt" -WaitUntil 9
Get-Content "$PSScriptRoot\out.txt" -WaitUntilMatch "^LastOutput"
所以当输出9
行时,我们会打破循环。或者当达到某个正则表达式匹配时,我们可以打破循环吗?
答案 0 :(得分:2)
您可以将值从Get-Content传递给ForEach-Object,并在满足条件时中断。
例如,如果要在达到某个正则表达式匹配时中断,可以使用以下内容:
Get-Content -Path "$PSScriptRoot\out.txt" -Wait | ForEach-Object {$_ ; if($_ -Match "some regex"){break} }
如果您想要在n行之后中断,那么当Bruce回答时,您可以使用Select-Object -Frist n
。
请注意,如果文件已包含满足条件的内容,并且您只想要添加到文件中的新数据,则还应使用-tail
选项。
例如,如果文件已包含9行,并且您只想要将<9>行添加到文件之后,则运行该命令,然后使用:
Get-Content -Path "$PSScriptRoot\out.txt" -Wait -tail 1 | select -skip 1 -first 9
使用-tail 1
,该命令将仅输出文件的最后一行以及之后将添加到文件中的新数据。 -skip 1
用于过滤掉最后一行,仅输出新数据。
答案 1 :(得分:2)
您可以使用Select-Object -First n
在n项之后停止管道:
Get-Content -Path "$PSScriptRoot\out.txt" -Wait | select -first 9
(虽然我喜欢将-WaitUntil
和-WaitMatch
添加到Get-Content
的想法。可能值得在PowerShell Github repo上打开一个问题