sed或awk:从选定的多行替换\ n

问题描述 投票:-1回答:2

我有一个文本文件如下

jhasdh jkhsd
lahs dkjh j

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<tbody>
<tr class="odd">
<td><p><span class="c2">sample text</span></p>
<p><span class="c2">sample text3</span></p>
</td>
</tr>
</tbody>
</table>


lajslkdjl 

;kjksalkd j

;kasdl kj


<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<tbody>
<tr class="odd">
<td><p><span class="c2">sample text223</span></p>
<p><span class="c2">sample 2332text3</span></p>
</td>
</tr>
</tbody>
</table>

jashdkjh

jashdjkh


jskdhkj

现在我希望整个<table> .mutiple lines her.. </table>在一行。即

jhasdh jkhsd
lahs dkjh j

<table><colgroup><col style="width: 100%" /></colgroup><tbody><tr class="odd"><td><p><span class="c2">sample text</span></p><p><span class="c2">sample text3</span></p></td></tr></tbody></table>


lajslkdjl 

;kjksalkd j

;kasdl kj


<table><colgroup><col style="width: 100%" /></colgroup><tbody><tr class="odd"><td><p><span class="c2">sample text223</span></p><p><span class="c2">sample 2332text3</span></p></td></tr></tbody></table>

jashdkjh

jashdjkh


jskdhkj

我可以在sublime文本中这样做,如下所示

发现:(?s)(<table>(?:(?!<table>).)*?</table>)

然后选择所有的<table> ... </table>

然后在\n找到""并替换为selection(空白)

但我想用sed或awk来做

我该怎么做

awk sed
2个回答
0
投票
awk '/<table>/{ORS=""} /<\/table>/{ORS=RS} 1' file 

对于每一行:

  • 如果找到<table>,将Output Record Separator设置为空字符串(""),
  • 如果找到</table>,恢复ORS,
  • 打印。

看到这个online demo

请注意,这可能适用于您的样本,但显然不适用于所有table元素。见why parsing HTML using regex is a bad practice


0
投票

如果'd'文件中的数据尝试gnu sed,

sed -E '/<table>/{:a N;/.*\n<\/table>/!ba;s/\n//g;} ' d
© www.soinside.com 2019 - 2024. All rights reserved.