假设我有一个包含以下内容的文件:
1,first_string,somevalue
2,second_string,someothervalue
n,n_nd_string,somemorevalue
我需要获取此文件的内容,获取最后一个字符串,并获取“,”符号(在本例中为n)之前的数字。 (我只是增加它,并将n + 1字符串附加到此文件中,但是现在没有关系)。我希望所有这些工作都通过 pipeline 级联
完成到目前为止,我已经解决了这个问题:
[int]$number = Get-Content .\1.mpcpl | Select-Object -Last 1 | Select-String -Pattern '^(\d)' | ForEach-Object {$_.matches.value}
它确实有效,但是我想知道是否有任何方法可以在不使用foreach循环的情况下解决 Select-String -Pattern'^(\ d)'返回对象?因为我知道我的案例中的return集合将仅包含1个元素(我选择了文件的最后一个字符串,但只得到一个匹配项)
答案 0 :(得分:1)
您可以使用
$num = [int]((Get-Content .\1.mpcpl | Select-Object -Last 1) -replace '^(\d).*', '$1')
注释
(Get-Content .\1.mpcpl | Select-Object -Last 1)
-读取文件并获取最后一行(... -replace '^(\d).*', '$1')
-从返回的行中获取第一位数字(注意:如果该行不是以数字开头,则将失败,因为输出将是整行)< / li>
[int]
将字符串值转换为 int 。另一种方法是获取匹配项,然后从默认的$matches
变量中进行检索:
[IO.File]::ReadAllText($filepath) -match '(?m)^(\d).*\z' | Out-Null
[int]$matches[1]
(?m)^(\d).*\z
模式将最后一行的数字移到组1中,即$matches[1]
。
答案 1 :(得分:0)
在我看来,这就像一个csv ...
import-csv 1.mpcpl -header field1,field2,field3 | select -last 1 | select -expand field1
输出:
n