在特定模式后的行添加文本行
Add line of text at line after specific pattern
作为一个小型个人项目的一部分,我正在尝试学习一些 Powershell 脚本。
我目前要解决的问题是,给定一个包含数百个 ASCII 文本文件的文件夹,对于每个文件:
- 找到特定文本在
.txt
文件中的行(可能有 none,可能有几个)
- 如果有 none,在第 3 行(生成的文件)添加新文本
- 如果有一个或多个,则在第一次点击之前添加新文本作为新行
我设法找出了如何定位线
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
作为一个小型个人项目的一部分,我正在尝试学习一些 Powershell 脚本。
我目前要解决的问题是,给定一个包含数百个 ASCII 文本文件的文件夹,对于每个文件:
- 找到特定文本在
.txt
文件中的行(可能有 none,可能有几个) - 如果有 none,在第 3 行(生成的文件)添加新文本
- 如果有一个或多个,则在第一次点击之前添加新文本作为新行
我设法找出了如何定位线
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