我有一个简单的文本文件:
$ 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
。