Linux/Cygwin

Linux/Cygwin

我有一个简单的文本文件:

$ cat food.txt
Apples
Bananas
Carrots

Linux/Cygwin

我可以想到几种在 Linux/Cygwin 中获取行号的方法:

$ nl food.txt
     1  Apples
     2  Bananas
     3  Carrots

$ cat -n food.txt
     1  Apples
     2  Bananas
     3  Carrots

$ less -NFX food.txt
      1 Apples
      2 Bananas
      3 Carrots

电源外壳

我想到最好的办法是这样的:

更新日期 2017-11-27Mo:(1)稍微调整了一下:Out-String -Stream强制将那些讨厌的对象文本化。(2)注意:我正在寻找可以接受管道输入的东西。

PS C:\> function nl{$input | Out-String -Stream | Select-String '.*' | Select-Object LineNumber, Line}

PS C:\> cat .\food.txt | nl
LineNumber Line
---------- ----
         1 Apples
         2 Bananas
         3 Carrots

有没有更简单的方法?更短的?使用 PowerShell 内置的东西?

答案1

我将我的代码行包装到一个函数中,您可以将其包含在您的一个 Powershell 配置文件中。

Function nl 
{
<# .Synopsis
    Mimic Unic / Linux tool nl number lines
   .Description
    Print file content with numbered lines no original nl options supported
   .Example
     nl .\food.txt
#>
  param (
    [parameter(mandatory=$true, Position=0)][String]$FileName
  )

  process {
    If (Test-Path $FileName){
      Get-Content $FileName | ForEach{ "{0,5} {1}" -f $_.ReadCount,$_ }
    }
  }
}

示例输出:

> nl .\food.txt
    1 Apples
    2 Bananas
    3 Carrots

答案2

这将完成此操作并且可以与任何产生输出的命令一起使用:

$i = 1; cat food.txt | % {$i++;"$($i-1) `t $_"}

输出如下:

1        Apples
2        Bananas
3        Carrots

以下是带有目录列表的示例:

$i = 1; dir | % {$i++;"$($i-1) `t $_"}

输出如下:

1        backgrounds
2        boot
3        inetpub
4        PerfLogs
5        Program Files
6        Program Files (x86)
7        Riot Games
8        Users
9        Windows
10       Reflect_Install.log

显然,如果您希望行号从 0 开始,则设置$i = 0

相关内容