作为一个小型个人项目的一部分,我试图学习一些Powershell脚本。
我想解决的当前问题是,给定一个包含数百个ASCII文本文件的文件夹,每个文件:
.txt
文件中的行(可能没有,可能有几行)我设法找到了如何找到线
gci -literalpath "C:\path" -rec -filter *.txt | % {
$line = Select-String -literalpath $_.fullname -pattern "foo_bar" | select LineNumber
}
我知道如何在特定的行号添加一行(在这种情况下,是生成的文件的第三行)
gci -literalpath "C:\path" -rec -filter *.txt | % {
$file = get-Content -literalpath $_.fullname
set-content -literalpath $_.fullname -value ($file[0..1] + "newline" + $file[2..($file.Length-1)])
}
我遇到的问题是,我似乎无法使用$line
,我期待int
(因为LineNumber
),但如果我输入$line.GetType()
我得到PSCustomObject
作为答案,我无法找到从中提取整数值的方法,如果我打印$line
,我会得到类似于
LineNumber
-------------
4
5
10
我错过了什么吗?有没有更简单的方法来实现我想要的目标?
答案 0 :(得分:3)
你可以像这样得到Linenumber:
$line.LineNumber
或者你可以这样做:
gci -literalpath "C:\path" -rec -filter *.txt | % {
$line = Select-String -literalpath $_.fullname -pattern "foo_bar" | select -ExpandProperty LineNumber
}
在这种情况下,您将拥有一个整数变量。请注意,如果您有多个匹配项,则它将是一个数组,而不是一个整数。
为了您将来的努力,cmdlet Get-Member
可能会帮助您探索PSObject。
使用示例:$line | get-member