我试图使用sed替换文件的html元素的每一个出现,所以我可以交替颜色行.
这是我尝试过的,它不起作用.
sed 's/<tr valign=top>/<tr valign=top bgcolor='#E0E0E0'>/2' untitled.html
Run Code Online (Sandbox Code Playgroud)
bra*_*zzi 11
我用awk解决它:
awk '/<tr valign=top>/&&v++%2{sub(/<tr valign=top>/, "<tr valign=top bgcolor='#E0E0E0'>")}{print}' untitled.html
Run Code Online (Sandbox Code Playgroud)
首先,它验证该行是否包含 <tr valign=top>
/<tr valign=top>/&&v++%2
Run Code Online (Sandbox Code Playgroud)
以及是否<tr valign=top>是一个奇怪的发现实例:
v++%2
Run Code Online (Sandbox Code Playgroud)
如果是这样,它将替换<tr valign=top>该行
{sub(/<tr valign=top>/, "<tr valign=top bgcolor='#E0E0E0'>")}
Run Code Online (Sandbox Code Playgroud)
由于要打印所有行,因此总会执行一个块(对于所有行)并将打印当前行:
{print}
Run Code Online (Sandbox Code Playgroud)
这对我有用:
sed -e "s/<tr/<TR bgcolor='#E0E0E0'/g;n" simpletable.htm
Run Code Online (Sandbox Code Playgroud)
示例输入:
<table>
<tr><td>Row1 / col1</td><td>col2</td><td>col3</td></tr>
<tr><td>Row2 / col1</td><td>col2</td><td>col3</td></tr>
<tr><td>Row3 / col1</td><td>col2</td><td>col3</td></tr>
<tr><td>Row4 / col1</td><td>col2</td><td>col3</td></tr>
<tr><td>Row5 / col1</td><td>col2</td><td>col3</td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)
示例输出:
<table>
<TR bgcolor='#E0E0E0'><td>Row1 / col1</td><td>col2</td><td>col3</td></tr>
<tr><td>Row2 / col1</td><td>col2</td><td>col3</td></tr>
<TR bgcolor='#E0E0E0'><td>Row3 / col1</td><td>col2</td><td>col3</td></tr>
<tr><td>Row4 / col1</td><td>col2</td><td>col3</td></tr>
<TR bgcolor='#E0E0E0'><td>Row5 / col1</td><td>col2</td><td>col3</td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)
关键是使用nsed 中的命令,该命令前进到下一行。仅当 TR 占据不同的行时,此方法才有效。它会因嵌套表而中断,或者如果单行上有多个 TR。