1

我有这个文本,我需要删除页码:

<p class="p3">El gabinete se iba iluminando lentamente ... Por delante de las</p>
<p class="p5"><span class="s4"><i>32</i></span> grandes nubes de un color violeta obscuro...</p>
<p class="p3">

我需要删除

</p>
<p class="p5"><span class="s4"><i>32</i></span>

从中。

到目前为止我有这个

sed -E -i '' 's/</p>\n<p class="p[0-9]+"[^>]*><span class=".+">.+<\/span> / /g' Capítulo1.html

但这不起作用,没有</p>\n零件就可以工作,但我真的需要捕获和替换它</p>

请注意,这是在 Mac 上,sed 似乎与 Linux 有点不同。段落类也可以是任何以 p 开头后跟数字的东西,类似于 span 类 s 后跟数字,斜体标签可以存在或不存在,中间是页码。

4

2 回答 2

0

除非换行真的很重要,否则您可以尝试先将它们剥离:

tr -d '\n' | sed ...
于 2013-03-29T10:57:07.713 回答
0

你错过了转义结束段落标签的正斜杠,试试这个:

's/<\/p>\r?\n<p class="p\d+"[^>]*><span class=".+">.+<\/span> / /g' Capítulo1.html

要获得您所描述的更完整的匹配,请尝试以下操作:

's/<\/p>\r?\n<p class="p\d+"[^>]*?><span class="s\d+">(<i>)?\d+(<\/i>)?<\/span>/ /g' Capítulo1.html

This more specifically narrows down the span class matching, and adds non-greediness to stop any unexpected surprises when a huge chunk of data is removed between a span opening tag and the furthest matching span closing tag.

于 2013-03-29T11:05:54.367 回答