PowerShell 等效于“head -n-3"? [英] PowerShell equivalent for "head -n-3"?

查看:69
本文介绍了PowerShell 等效于“head -n-3"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经能够追踪到基本的头部/尾部功能:

I've been able to track down basic head/tail functionality:

head -10 myfile <==> cat myfile | select -first 10
tail -10 myfile <==> cat myfile | select -last 10

但是如果我想列出除最后三行之外的所有行或除前三行之外的所有行,你怎么做?在 Unix 中,我可以执行head -n-3"或tail -n+4".对于 PowerShell 应该如何做到这一点并不明显.

But if I want to list all lines except the last three or all lines except the first three, how do you do that? In Unix, I could do "head -n-3" or "tail -n+4". It is not obvious how this should be done for PowerShell.

推荐答案

与 -First 和 -Last 参数一样,还有一个 -Skip 参数会有所帮助.值得注意的是,-Skip 是从 1 开始的,而不是零.

Like the -First and -Last parameters, there is also a -Skip parameter that will help. It is worth noting that -Skip is 1 based, not zero.

# this will skip the first three lines of the text file
cat myfile | select -skip 3

我不确定 PowerShell 是否可以为您返回除预构建的最后 n 行之外的所有内容.如果您知道长度,您可以从行数中减去 n 并使用 select 中的 -First 参数.您还可以使用仅在填充时通过行的缓冲区.

I am not sure PowerShell has something that gives you back everything except the last n lines pre-built. If you know the length you could just subtract n from the line count and use the -First parameter from select. You could also use a buffer that only passes lines through when it is filled.

function Skip-Last {
  param (
    [Parameter(Mandatory=$true,ValueFromPipeline=$true)][PsObject]$InputObject,
    [Parameter(Mandatory=$true)][int]$Count
  )

  begin {
    $buf = New-Object 'System.Collections.Generic.Queue[string]'
  }

  process {
    if ($buf.Count -eq $Count) { $buf.Dequeue() }
    $buf.Enqueue($InputObject)
  }
}

作为演示:

# this would display the entire file except the last five lines
cat myfile | Skip-Last -count 5

这篇关于PowerShell 等效于“head -n-3"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆