排除powershell中的索引
我有一个非常简单的要求,删除文件中的几行。我在网上发现了一些帮助,在那里我们可以利用索引。假设我想选择我使用的第五行排除powershell中的索引,powershell,Powershell,我有一个非常简单的要求,删除文件中的几行。我在网上发现了一些帮助,在那里我们可以利用索引。假设我想选择我使用的第五行 Get-Content file.txt | Select -Index 4 同样,如果我不需要第五和第六行怎么办?声明将如何改变 Get-Content file.txt | Select -Index -ne 4 我尝试在索引和数字之间使用-ne。它不起作用。“!=”也没有 下面的代码也没有给出错误,但没有给出所需的输出 $tmp = $test | where {
Get-Content file.txt | Select -Index 4
同样,如果我不需要第五和第六行怎么办?声明将如何改变
Get-Content file.txt | Select -Index -ne 4
我尝试在索引和数字之间使用-ne。它不起作用。“!=”也没有
下面的代码也没有给出错误,但没有给出所需的输出
$tmp = $test | where {$_.Index -ne 4,5 }
不知道
索引
属性或参数,但也可以这样实现:
$count = 0
$exclude = 4, 5
Get-Content "G:\input\sqlite.txt" | % {
if($exclude -notcontains $count){ $_ }
$count++
}
编辑:
ReadCount
属性保存您需要的信息:)
警告:正如@PetSerAl和@Matt所指出的,
ReadCount
从1开始,而不是从0开始,就像数组一样,管道元素没有索引
自动属性,但是如果您愿意,您可以添加它:
function Add-Index {
begin {
$i=-1
}
process {
Add-Member Index (++$i) -InputObject $_ -PassThru
}
}
然后,您可以通过索引应用筛选:
Get-Content file.txt | Add-Index | Where-Object Index -notin 4,5
试试这个:
get-content file.txt | select -index (0..3 + 5..10000)
这是一个有点黑客,但它的工作。缺点是建立这个范围需要一些时间。另外,调整10000以确保获得整个文件 将其转换为数组,并使用RemoveRange方法(ind index,int count)
管道元素不会从Get Content返回:ReadCount
@MattReadCount
是有效的解决方案,但它不是零基的,这与PowerShell中通常使用的索引不同,因此您必须考虑到这一点。当然。。。我在回答中写道,在我重读索达维洛汉克斯之前,我已经添加了一个警告
get-content file.txt | select -index (0..3 + 5..10000)
[System.Collections.ArrayList]$text = gc C:\file.txt
$text.RemoveRange(4,1)
$text