Я бы решил это с помощью awk:
awk '/<tr valign=top>/&&v++%2{sub(/<tr valign=top>/, "<tr valign=top bgcolor='#E0E0E0'>")}{print}' untitled.html
Сначала проверяется, содержит ли строка <tr valign=top>
/<tr valign=top>/&&v++%2
и является ли <tr valign=top>
нечетным найденным экземпляром:
v++%2
Если это так, он заменяет <tr valign=top>
в строке
{sub(/<tr valign=top>/, "<tr valign=top bgcolor='#E0E0E0'>")}
Так как все строки должны быть напечатаны, есть блок, который всегда будет выполняться (для всех строк) и напечатает текущую строку:
{print}