1

我需要在文件中搜索一个词并在搜索结果中显示一个索引,以便于引用。

bash 中的命令是:

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

到目前为止我在 Powershell 中所拥有的:

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

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

如何将 bash 命令转换为等效的 Powershell?

4

2 回答 2

2

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

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

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

上面使用格式运算符-f,将左空格填充到 6 个字符 ( ) 第一个 RHS 操作数 ( ),它是(递增的)索引,,后跟一个制表符 ( ) 和第二个 RHS 操作数 ( ),这是手头的输入行()。,6{0}++$i`t{1}$_.Line

于 2020-06-16T01:20:23.340 回答
0

只需使用 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"
}
于 2020-06-16T01:36:40.000 回答