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

时间:2012-06-11 10:04:44

标签: 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">random string</td>
<td align="left">random string</td>
<td align="left">random string</td>
<td align="right">random string</td>

对于固定线路,我发现我可以这样做:

(gc $maindir\Report23.HTML) | ? {(12..14) -notcontains $_.ReadCount} | out-file $maindir\Report23b.HTML

它可以删除12-14行,但我需要将其余的固定行号放在同一个命令中,我似乎无法弄清楚如何。输出文件的文件大小也是原始文件大小的两倍,我觉得很奇怪。我尝试使用set-content生成接近原始文件大小的文件大小,但在某些部分中断了文本编码。

我不知道如何识别这个模式......

2 个答案:

答案 0 :(得分:0)

你不能做类似的事情:

$lines = 12..14
$lines += 17
$lines += 25..27
$lines += 30..32
$lines += 40..42

然后在where子句中使用该数组:

? {$lines -notcontains $_.ReadCount} 

答案 1 :(得分:0)

输出文件的文件大小是原始文件大小的两倍,因为原始文件可能是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