Powershell 在特定图案后的第行添加文本行
作为一个小型个人项目的一部分,我正在尝试学习一些Powershell脚本 当前我试图解决的问题是,给定一个包含数百个ASCII文本文件的文件夹,对于每个文件:Powershell 在特定图案后的第行添加文本行,powershell,Powershell,作为一个小型个人项目的一部分,我正在尝试学习一些Powershell脚本 当前我试图解决的问题是,给定一个包含数百个ASCII文本文件的文件夹,对于每个文件: 查找.txt文件中特定文本所在的行(可能没有,也可能有多个) 如果没有,请在第3行(结果文件的)添加新文本 如果有一个或多个,则在第一次点击之前添加新文本作为新行 我设法找到了线路的位置 gci -literalpath "C:\path" -rec -filter *.txt | % { $line = Select-String
- 查找
文件中特定文本所在的行(可能没有,也可能有多个).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
}
在这种情况下,您将有一个整数变量。请注意,如果有多个匹配项,则它将是一个数组而不是整数
对于您将来的工作,cmdletGet 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
}