Powershell 在特定图案后的第行添加文本行

Powershell 在特定图案后的第行添加文本行,powershell,Powershell,作为一个小型个人项目的一部分,我正在尝试学习一些Powershell脚本 当前我试图解决的问题是,给定一个包含数百个ASCII文本文件的文件夹,对于每个文件: 查找.txt文件中特定文本所在的行(可能没有,也可能有多个) 如果没有,请在第3行(结果文件的)添加新文本 如果有一个或多个,则在第一次点击之前添加新文本作为新行 我设法找到了线路的位置 gci -literalpath "C:\path" -rec -filter *.txt | % { $line = Select-String

作为一个小型个人项目的一部分,我正在尝试学习一些Powershell脚本

当前我试图解决的问题是,给定一个包含数百个ASCII文本文件的文件夹,对于每个文件:

  • 查找
    .txt
    文件中特定文本所在的行(可能没有,也可能有多个)
  • 如果没有,请在第3行(结果文件的)添加新文本
  • 如果有一个或多个,则在第一次点击之前添加新文本作为新行
我设法找到了线路的位置

gci -literalpath "C:\path" -rec -filter *.txt | % {
$line = Select-String -literalpath $_.fullname -pattern "foo_bar" | select LineNumber
}
我知道如何在特定行号处添加一行(在本例中,是结果文件的第三行)

我遇到的问题是,我似乎无法使用
$line
,我希望得到
int
(因为
LineNumber
是),但如果我键入
$line.GetType()
我得到
PSCustomObject
作为答案,我找不到从中提取整数值的方法,它就在那里,如果我打印
$line
,我会得到类似的输出

LineNumber
-------------
4
5
10

我错过什么了吗?是否有一种更简单的方法来实现我的目标?

您可以这样获得行号:

$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

你能试试
[Int]$line=Select String..
$line.LineNumber
?@DarkLite1我一拿到我的常用机器,就不能在这台机器上运行脚本了(都是Win7)。感谢
|选择-ExpandProperty LineNumber
将返回
LineNumber
的值,而不是带有
LineNumber
属性的
PSCustomObject
,或者不可能有匹配。@Matt显然是对的,在这种情况下,
$line
将是
$null
非常确定的是,
select LineNumber-ExpandProperty LineNumber
是冗余的,
select-ExpandProperty LineNumber
的工作原理与well@matt当你发现类似的东西时,请随意更正我的答案
gci -literalpath "C:\path" -rec -filter *.txt | % {
$line = Select-String -literalpath $_.fullname -pattern "foo_bar" | select -ExpandProperty LineNumber
}