Sed抓取标签&换行符(Mac OSX)

时间:2013-03-29 10:54:46

标签: regex sed

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

<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后跟数字,斜体标记可以在那里或不在,中间是pagenumber。

2 个答案:

答案 0 :(得分:0)

除非新行真正重要,否则你可以先尝试剥离它们:

tr -d '\n' | sed ...

答案 1 :(得分: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

这更具体地缩小了span类匹配,并添加了非贪婪,以便在跨度开始标记和最远匹配跨度结束标记之间删除大量数据时阻止任何意外惊喜。