逐行查找并替换循环中具有多个字符串的字符串

时间:2017-08-19 08:28:26

标签: powershell

原始数据:

<tr><td>ABerglund@domain.com</td><td></td><td></td><td></td></tr>
<tr><td>AHill@domain.com</td><td></td><td></td><td></td></tr>
<tr><td>KBrowne@domain.com</td><td></td><td></td><td></td></tr>
<tr><td>LBonifaz@domain.com</td><td></td><td></td><td></td></tr>
<tr><td>RBready@domain.com</td><td></td><td></td><td></td></tr>
<tr><td>Bnet@domain.com</td><td></td><td></td><td></td></tr>
<tr><td>Fzone@domain.com</td><td></td><td></td><td></td></tr>
<tr><td>KBN@domain.com</td><td></td><td></td><td></td></tr>

在文件<tr>中,需要在序列循环中逐行替换下面的列表

<tr class="danger">
<tr class="warning">
<tr class="active">
<tr class="success">

试过:

$str = Get-Content C:\Users\admin\Desktop\n\2.html

#odd
$f=0; $str.Split("`n") | % { if($f = !$f) { $_ } }

#even
$g=1; $str.Split("`n") | % { if($f = !$f) { $_ } }

$f -replace "<tr>", '<tr class="active">'
$g -replace "<tr>", '<tr class="success">'

结果未按预期发布

1 个答案:

答案 0 :(得分:1)

要使四个旋转类计数线并进行模数除法%
并使用切换命令。

$file = Get-Content "C:\Users\admin\Desktop\n\2.html"

$cnt=0
ForEach ($line in $file){
    if ($line -match '^\<tr\>') {
        switch ($cnt) {
            0 {$line -replace '\<tr\>','<tr class="danger">'}
            1 {$line -replace '\<tr\>','<tr class="warning">'}
            2 {$line -replace '\<tr\>','<tr class="active">'}
            3 {$line -replace '\<tr\>','<tr class="success">'}
        }
        $cnt++
        $cnt%=4
    } else {
        $line
    }
}

或者将类放在数组中并按索引插入:

$file = Get-Content "C:\Users\admin\Desktop\n\2.html"
$classes = ('danger','warning','active','success')
$cnt=0
ForEach ($line in $file){
    if ($line -match '^\<tr\>') {
        $line -replace '\<tr\>', ('<tr class="'+$($classes[$cnt])+'">')
        $cnt++
        $cnt%=4
    } else {
        $line
    }
}