Utils/head.ps1

Register-GnuUtil @{
    Name            = 'head'
    Category        = 'Viewing file contents'
    Synopsis        = 'Output the first part of files.'
    Usage           = @('head [OPTION]... [FILE]...')
    Description     = @(
        'Print the first 10 lines of each FILE to standard output.',
        'With more than one FILE, precede each with a header giving the file name.',
        '',
        'With no FILE, or when FILE is -, read standard input.'
    )
    FileOperands    = $true
    NumericOption   = 'n'
    OpenErrorFormat = "cannot open '{0}' for reading: {1}"
    ReadErrorFormat = "error reading '{0}': {1}"
    Options         = @(
        @{ Short = 'c'; Long = 'bytes'; Key = 'count'; Arg = '[-]NUM'; Sets = @{ unit = 'bytes' }; Help = "print the first NUM bytes of each file; with the leading '-', print all but the last NUM bytes of each file" }
        @{ Short = 'n'; Long = 'lines'; Key = 'count'; Arg = '[-]NUM'; Sets = @{ unit = 'lines' }; Help = "print the first NUM lines instead of the first 10; with the leading '-', print all but the last NUM lines of each file" }
        @{ Short = 'q'; Long = 'quiet'; Key = 'headers'; Value = 'never'; Help = 'never print headers giving file names' }
        @{ Long = 'silent'; Key = 'headers'; Value = 'never'; Help = 'same as --quiet' }
        @{ Short = 'v'; Long = 'verbose'; Key = 'headers'; Value = 'always'; Help = 'always print headers giving file names' }
        @{ Short = 'z'; Long = 'zero-terminated'; Help = 'line delimiter is NUL, not newline' }
    )
    Notes           = @(
        'NUM may have a multiplier suffix:',
        'b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,',
        'GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y, R, Q.',
        'Binary prefixes can be used, too: KiB=K, MiB=M, and so on.',
        '',
        'PowerShell note: a PowerShell function cannot stop the command that feeds it; for',
        'endless producers use Select-Object -First N instead.'
    )
}