sed或awk:从选定的多行替换 n
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed或awk:从选定的多行替换 n相关的知识,希望对你有一定的参考价值。
我有一个文本文件如下
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>
然后在
找到""
并替换为selection
(空白)
但我想用sed或awk来做
我该怎么做
答案
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。
另一答案
如果'd'文件中的数据尝试gnu sed,
sed -E '/<table>/{:a N;/.*
</table>/!ba;s/
//g;} ' d
以上是关于sed或awk:从选定的多行替换 n的主要内容,如果未能解决你的问题,请参考以下文章
如何根据来自不同命令的多行打印输出的输入将文本文件内容替换为“sed”或“awk”?
使用 sed(或 awk 或 tr)将换行符 \n 替换为表达式
Linux系列:grep过滤awk拆分sed替换的使用方法与区别