Powershell,从html文件中删除文本行

Powershell,从html文件中删除文本行,powershell,lines,Powershell,Lines,我有一些html文件的报告。我需要将它们放在excel中并进行一些更改,所以我想我可以事先使用powershell进行这些更改。一些行位于固定位置,其他行则不是,因此我需要通过使脚本识别模式来删除它们 从顶部开始的固定线路:12-14,17,19,25-27,30-32,40-42 从底部开始的固定线路:3-13、48-60 我需要查找和删除的模式是: <td align="center">random string</td> <td align="left">

我有一些html文件的报告。我需要将它们放在excel中并进行一些更改,所以我想我可以事先使用powershell进行这些更改。一些行位于固定位置,其他行则不是,因此我需要通过使脚本识别模式来删除它们

从顶部开始的固定线路:12-14,17,19,25-27,30-32,40-42 从底部开始的固定线路:3-13、48-60

我需要查找和删除的模式是:

<td align="center">random string</td>
<td align="left">random string</td>
<td align="left">random string</td>
<td align="left">random string</td>
<td align="right">random string</td>
它的工作原理是删除第12-14行,但我需要将其余的固定行号放在同一个命令中,我似乎不知道如何操作。而且输出文件的文件大小是原始文件的两倍,我觉得这很奇怪。我尝试使用set content,它生成的文件大小接近原始文件,但在某些部分破坏了文本编码


我不知道如何去识别模式,但是…

你不能做一些类似于:

$lines = 12..14
$lines += 17
$lines += 25..27
$lines += 30..32
$lines += 40..42
然后在where子句中使用该数组:

? {$lines -notcontains $_.ReadCount} 

输出文件的文件大小是原始文件的两倍,因为原始文件可能是ASCII编码的,而新文件是按默认Unicode编码的。试试这个:

$length = (gc $maindir\Report23.HTML).length
$rangefrombottom = ($length-60)..($length-48)+($length-13)..($length-3)
$rangefromtop = 12..14+17,19+25..27+30..32+40..42
(gc $maindir\Report23.HTML) | ? {$rangefromtop -notcontains $_.ReadCount} | ? {$rangefrombottom -notcontains $_.ReadCount} | out-file -encoding ASCII $maindir\Report23b.HTML

Hm不,它只替换了12-14。这对于固定行删除非常有效:关于模式,我可以做smth,比如gc$maindir\Report23.HTML | Where{$\ notmatch'.*`n.*.'}…?我最终创建了一个excel宏,但我会将您的答案标记为已接受的答案,因为它涵盖了我试图实现的大部分内容。但只有一个修正:$rangefrombottom=$length-59..$length-47+$length-12..$length-2
$length = (gc $maindir\Report23.HTML).length
$rangefrombottom = ($length-60)..($length-48)+($length-13)..($length-3)
$rangefromtop = 12..14+17,19+25..27+30..32+40..42
(gc $maindir\Report23.HTML) | ? {$rangefromtop -notcontains $_.ReadCount} | ? {$rangefrombottom -notcontains $_.ReadCount} | out-file -encoding ASCII $maindir\Report23b.HTML