Shell 使用sed在同一行上匹配相同的图案n次
我有一个输入文件div.txt,如下所示:Shell 使用sed在同一行上匹配相同的图案n次,shell,unix,sed,Shell,Unix,Sed,我有一个输入文件div.txt,如下所示: <div>a</div>b<div>c</div> <div>d</div> abc D 现在,我想使用sed拾取所有div标记以及它们之间的文本: sed-n's:.\(.*).:\1:p'
<div>a</div>b<div>c</div>
<div>d</div>
abc
D
现在,我想使用sed拾取所有div标记以及它们之间的文本:
sed-n's:.\(.*).:\1:p'
我得到的结果是:
<div>c</div>
<div>d</div>
c
D
我真正想要的是:
<div>a</div>
<div>c</div>
<div>d</div>
a
C
D
所以问题是,如何在同一条线上匹配相同的图案n次?
(请不要建议我使用perl或python)Sed不是处理HTML的合适工具 但是如果您确实坚持,并且您知道您的输入将始终具有正确闭合的div标记对,那么您可以用换行符替换div之外的所有内容:
sed 's=</div>.*<div>=</div>\n<div>='
sed's=.*=\n=
这可能适合您(GNU-sed):
sed的/\(\)[^使用支持HTML的工具处理HTML要安全得多。标签之间的文本与周围的标签位于不同的行上如何?@RendoJack解决方案基于您提供的数据。如果有特殊情况,请修改问题并提供它们。
sed 's=</div>.*<div>=</div>\n<div>='
sed 's/\(<\/div>\)[^<]*/\1\n/;/^</P;D' file