将索引号添加到“Select-String”的结果列表中

Add index number to list of results of `Select-String`

我需要在文件中搜索术语并在搜索结果中显示索引以便于引用。

bash 中的命令为:

cat <file> | grep 'Table: ' | cat -n

到目前为止,我在 Powershell 中的内容:

Get-Content <file> | Select-String 'Table: ' | Select-Object -Property LineNumber, Line

不幸的是,我没有意识到 LineNumber 给出了文件中的实际行,而不是结果列表中的索引。

如何将 bash 命令翻译成它的 Powershell 等效命令?

确实,Select-Object输出的对象的.Line 属性表示给定输入文件中每个匹配项的行号。

PowerShell 没有 cat -n 的直接等价物(在输出的所有输入行前加上一个基于 1 的索引),但是使用 ForEach-Object 自己动手并不难cmdlet:

$i = 0
Get-Content file.txt | Select-String 'Table: ' | ForEach-Object {
  "{0,6}`t{1}" -f ++$i, $_.Line
}

上面使用-fformat operator,左-space-pad到6个字符(,6)第一个RHS操作数({0}),这是(递增的)索引,++$i,后跟一个制表符(`t)和第二个 RHS 操作数({1}),这是手边的输入行( $_.Line).

只需使用 WSL:

bash -c "cat <file> | grep 'Table: ' | cat -n"

这将 运行 Powershell 中的 bash 代码。对于真正的 powershell 选项,您可以这样做:

foreach ($line in $(Get-Content -Path <filepath> | Select-String 'Table: ')){
  $count++
  echo "$count $line"
}