0

难以使用 html 文件进行 sed 搜索和替换。

我有多个部分如下所示:

<TABLE class="cattable">   
  <TBODY>
    <TR>
      <TH colspan="2">Header</TH></TR>
    <TR>
      <TD>Random Amount of Data</TD>
      <TD>3</TD></TR>
    <TR>
      <TD>Moar Data</TD>
      <TD>3</TD></TR>
    <TR>
      <TD>Yup, More</TD>
      <TD>4</TD></TR></TBODY></TABLE>

我需要:

替换为 xxxxFOOxxxx:

<TABLE class="cattable">
  <TBODY>
    <TR>
     <TH colspan="2">

拿着吧:

Header

将其替换为 yyyyFOOyyyy:

</TH></TR>

拿着吧:

<TR>
   <TD>Random Amount of Data</TD>
   <TD>3</TD></TR>
<TR>
   <TD>Moar Data</TD>
   <TD>3</TD></TR>
<TR>
   <TD>Yup, More</TD>
   <TD>4</TD></TR>

用 zzzzFOOzzzz 替换它:

</TBODY></TABLE>

这是我在 vim 中尝试过的,但不能正确限制贪婪的 .* :

s:\(<TABLE class="cattable">\_s\s*<TBODY>\_s\s*<TR>\_s\s*<TH colspan="2">\)\(.*\)\(<\/TH><\/TR>\)\(\_.*[^<]*\)\(<\/TABLE>\):xxxxFOOxxxx\2yyyyFOOyyyy\4zzzzFOOzzz<br>:g

蒂亚

4

1 回答 1

1

替换*\{-}以获得非贪婪匹配(与*?PCRE/Perl 正则表达式相同)。对于更复杂的情况,您将不得不使用带有负前瞻/后视的东西:就像\(\(<\/TH><\/TR>\)\@!.\)*代替.*,这里.\{-}可能就足够了。

注意:不适用于sed.

注意 2:vim不使用 BRE 或 ERE(基本/扩展正则表达式)sedvim :s不调用任何外部程序(包括sed),您的尝试也不适合sed. 因此,如果您不是要在从标签中sed删除时询问如何执行此操作。sed

于 2013-03-20T19:39:49.937 回答