PowerShell在单独的文件中以两种模式获取子字符串



我读了很多主题,但还没有解决我的问题,所以我创建了一个新的主题。

我有以下文件:

文件1:

1
2
3
ABS START
4
5
6

文件2:

7
8
9
ABS END
10
11
12

我想在ABS开始-ABS结束之间获得内容。因为它们在不同的文件中,所以下面的命令不起作用

$content = get-content -raw file*.txt | select-string -allmatches '(?smi)ABS START.*ABS END' 
$content.matches | foreach {$_.value}

使用for循环逐行读取似乎是不可能的。因为所有的文件都超过了2mil行。我试过这种方法,但花了几天时间,但没有完成。

这是我的for循环代码。它可以用几个文件工作,但当我为所有文件运行时,它似乎无法完成

$Log = type file*
for ($i=1; $i -le $Log.Count; $i++){
$Line = $Log[$i]
if($Line -match "ABS START"){
for ($j = $i; $j -le $Log.Count; $j++){
$LineJ = $Log[$j]
if($LineJ -match "ABS END"){
$i = $j
break
}
else{
$Log[$j] >> $Result   
}
}
}
}

寻求您的帮助,感谢所有

我看到了你的解决方案,我有另一个想法:

$temp = get-content file*.txt
$begin = $temp.indexof("ABS Start")
$end = $temp.indexof("ABS End")

现在试试:

$temp[$begin..$end]

我希望这能有所帮助☺

最后,我想到了一个解决方案。

我将读取每个文件的每一行,并将内容写入临时文件

如果行content="ABS START",则清除临时文件内容

如果行content="ABS END",则将临时文件的内容添加到输出文件中。

所以它只需要一个循环,整个文件在30分钟内就处理完毕了。

顺便说一句,有人能教我如何结束这个问题吗?

相关内容

  • 没有找到相关文章

最新更新