在特定模式后的行添加文本行

Add line of text at line after specific pattern

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

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

我设法找出了如何定位线

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 我得到类似于 [=20= 的输出]

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 可能会帮助您探索 PSObjects。

用法示例:$line | get-member