将索引号添加到“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
}
上面使用-f
,format 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"
}
我需要在文件中搜索术语并在搜索结果中显示索引以便于引用。
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
}
上面使用-f
,format 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"
}