Sed替换每第n次出现

tim*_*tim 12 replace sed

我试图使用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)


Che*_*eso 5

这对我有用:

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。

  • 它会替换每个奇数出现,但是如何针对每个偶数出现更改它? (2认同)