如何在bash中的两个模式之间删除

时间:2019-06-05 17:33:20

标签: html regex bash

如何删除文件一行中两个模式之间的文本,这里有行列表,为简单起见,我只显示了两行

 <sup id="Gen.2.23" class="v0_2_23">23</sup>Anke Adam pulo:</span></p><p class="q2"><span class="v0_2_23">“La ke non nerrepi-heihei pen arrepi-lo lapen ne-ok pen a-ok-lo;</span></p><p class="q2"><span class="v0_2_23">bangpi aphan ‘Arloso’ pusi hangpo,</span></p><p class="q2"><span class="v0_2_23">pima bangpi ke Pinso pensi enlo.”</span></p>
 <sup id="Gen.2.24" class="v0_2_24">24</sup>Anke Adam pulo:</span></p><p class="q2"><span class="v0_2_24">“La ke non nerrepi-heihei pen arrepi-lo lapen ne-ok pen a-ok-lo;</span></p><p class="q2"><span class="v0_2_24">bangpi aphan ‘Arloso’ pusi hangpo,</span></p><p class="q2"><span class="v0_2_24">pima bangpi ke Pinso pensi enlo.”</span></p>

我要删除</span></p><p class="q2">">之间的文本

我在输出中需要的结果如下所示

 <sup id="Gen.2.23" class="v0_2_23">23</sup>Anke Adam pulo: “La ke non nerrepi-heihei pen arrepi-lo lapen ne-ok pen a-ok-lo;bangpi aphan ‘Arloso’ pusi hangpo, pima bangpi ke Pinso pensi enlo.”</span></p>
 <sup id="Gen.2.24" class="v0_2_24">24</sup>Anke Adam pulo: “La ke non nerrepi-heihei pen arrepi-lo lapen ne-ok pen a-ok-lo;bangpi aphan ‘Arloso’ pusi hangpo, pima bangpi ke Pinso pensi enlo.”</span></p>

当我使用sed 's/<\/span><\/p><p class="q2">*.*">//g'时,它将删除第一个<span和最后一个">

2 个答案:

答案 0 :(得分:1)

您似乎正在寻找非贪婪的匹配项,否则.*>"将在线上尽可能匹配。非贪婪匹配的语法通常为*?,尽管我不相信sed支持它。因此,对于您的情况,您可以执行类似的操作

perl -pe 's;</span></p><p class="q2">.*?">;;g' input.html

但是,正如@melpomene所建议的那样,正则表达式不是HTML解析的好选择。

答案 1 :(得分:0)

看起来像这样会产生您想要的东西:

sed 's/<\/span><\/p><p class="q2"><span class="v0_2_23">//g' file

为避免转义,您可以使用其他分隔符,例如:

 sed 's|</span></p><p class="q2"><span class="v0_2_23">||g' file