使用awk修改特定模式后的第N个字段

时间:2017-04-21 17:37:31

标签: bash awk

我正在尝试使用awk来更改HTML表格中单元格的颜色。理想情况下,我可以使用awk在“Bob”之后找到“tg-6k2t”的第N个实例(在脚本中从早期传递的变量),并将颜色代码更改为“tg-b5xm”。这是一个巨大的HTML表,有许多不同的人的名字。

<tr>
    <td class="tg-6k2t">Bob</td>
    <td class="tg-6k2t"></td>
    <td class="tg-6k2t"></td>
    <td class="tg-6k2t"></td>    
    <td class="tg-6k2t"></td>
    <td class="tg-6k2t"></td>
</tr>

我想要的输出是

<tr>
    <td class="tg-6k2t">Bob</td>
    <td class="tg-6k2t"></td>
    <td class="tg-6k2t"></td>
    <td class="tg-b5xm"></td>    
    <td class="tg-6k2t"></td>
    <td class="tg-6k2t"></td>
</tr>

1 个答案:

答案 0 :(得分:1)

您可以使用Awk语句执行此操作,如下所示

awk -v count=6 '/"tg-6k2t".*Bob/{x=count}x--==1{sub(/tg-6k2t/,"tg-b5xm")}1' file

生成如下输出,意味着来自的第6行匹配Bob的行,将变量更改为方便。

<tr>
    <td class="tg-6k2t">Bob</td>
    <td class="tg-6k2t"></td>
    <td class="tg-6k2t"></td>
    <td class="tg-6k2t"></td>
    <td class="tg-6k2t"></td>
    <td class="tg-b5xm"></td>
</tr>