如何在不使用 foreach 循环的情况下通过管道处理 "Select-String -pattern" return 对象?
How to address "Select-String -pattern" return object via pipeline without using foreach loop?
假设我有一个包含以下内容的文件:
1,first_string,somevalue
2,second_string,someothervalue
n,n_nd_string,somemorevalue
我需要获取此文件的内容,获取最后一个字符串并获取“,”符号前的数字(在本例中为 n)。 (我只会递增它并将 n+1 个字符串附加到这个文件,但现在这并不重要)。我希望所有这些东西都用 pipeline cascade
完成
到目前为止我已经找到了这个解决方案:
[int]$number = Get-Content ..mpcpl | Select-Object -Last 1 | Select-String -Pattern '^(\d)' | ForEach-Object {$_.matches.value}
它确实有效,但我想知道是否有任何方法可以寻址 Select-String -Pattern '^(\d)' return不使用 foreach 循环的对象?因为我知道 return 集合在我的例子中只包含一个 1 元素(我选择了一个文件的最后一个字符串,我只得到一个匹配项)
您可以使用
$num = [int]((Get-Content ..mpcpl | Select-Object -Last 1) -replace '^(\d).*', '')
备注
(Get-Content ..mpcpl | Select-Object -Last 1)
- 读取文件并获取最后一行
(... -replace '^(\d).*', '')
- 从返回的行中获取第一个数字(注意:如果行不是以数字开头,它将失败,因为输出将是整行)
[int]
将字符串值转换为 int.
另一种方法是获取匹配项,然后从默认 $matches
变量中检索它:
[IO.File]::ReadAllText($filepath) -match '(?m)^(\d).*\z' | Out-Null
[int]$matches[1]
(?m)^(\d).*\z
模式将最后一行开头的数字放入第 1 组,因此 $matches[1]
。
我觉得它像一个 csv...
import-csv 1.mpcpl -header field1,field2,field3 | select -last 1 | select -expand field1
输出:
n
假设我有一个包含以下内容的文件:
1,first_string,somevalue
2,second_string,someothervalue
n,n_nd_string,somemorevalue
我需要获取此文件的内容,获取最后一个字符串并获取“,”符号前的数字(在本例中为 n)。 (我只会递增它并将 n+1 个字符串附加到这个文件,但现在这并不重要)。我希望所有这些东西都用 pipeline cascade
完成到目前为止我已经找到了这个解决方案:
[int]$number = Get-Content ..mpcpl | Select-Object -Last 1 | Select-String -Pattern '^(\d)' | ForEach-Object {$_.matches.value}
它确实有效,但我想知道是否有任何方法可以寻址 Select-String -Pattern '^(\d)' return不使用 foreach 循环的对象?因为我知道 return 集合在我的例子中只包含一个 1 元素(我选择了一个文件的最后一个字符串,我只得到一个匹配项)
您可以使用
$num = [int]((Get-Content ..mpcpl | Select-Object -Last 1) -replace '^(\d).*', '')
备注
(Get-Content ..mpcpl | Select-Object -Last 1)
- 读取文件并获取最后一行(... -replace '^(\d).*', '')
- 从返回的行中获取第一个数字(注意:如果行不是以数字开头,它将失败,因为输出将是整行)[int]
将字符串值转换为 int.
另一种方法是获取匹配项,然后从默认 $matches
变量中检索它:
[IO.File]::ReadAllText($filepath) -match '(?m)^(\d).*\z' | Out-Null
[int]$matches[1]
(?m)^(\d).*\z
模式将最后一行开头的数字放入第 1 组,因此 $matches[1]
。
我觉得它像一个 csv...
import-csv 1.mpcpl -header field1,field2,field3 | select -last 1 | select -expand field1
输出:
n