我有一个输入文件 div.txt ,如下所示:
<div>a</div>b<div>c</div>
<div>d</div>
现在,我想使用 sed 选择所有 div 标签和它们之间的文本:
sed -n 's:.*\(<div>.*</div>\).*:\1:p' < div.txt
我得到的结果:
<div>c</div>
<div>d</div>
我真正想要的是
<div>a</div>
<div>c</div>
<div>d</div>
所以问题是,如何在同一行上匹配同一模式n次? (请不要建议我使用perl或python)
答案 0 :(得分:1)
这可能对您有用(GNU sed):
sed 's/\(<\/div>\)[^<]*/\1\n/;/^</P;D' file
替换</div>
,后跟零个或多个非<
本身的字符和换行符。仅打印以<
开头的行。
答案 1 :(得分:0)
Sed不是处理HTML的正确工具。
但是,如果您真的坚持,并且知道您的输入将始终具有正确封闭的div标签对,则可以用换行符替换div之外的所有内容:
sed 's=</div>.*<div>=</div>\n<div>='