У меня есть кусок HTML-кода, и я пытаюсь извлечь первый абзац.

HTML выглядит так:

<p>
    Hi. Lorem Ipsum<br />
    dolor si amet […]
</p>
<p>…</p>
<p>…</p>

Сначала я подумал, используя sed 's/<\/p>*/<\/p>' но, похоже, он не работает: он ничего не делает

Любая идея ?

1 ответ1

1

Это должно работать хорошо. Он использует манипуляции со строками, а не регулярные выражения. Следует также учитывать случай, когда открывающий и закрывающий теги P находятся на одной строке.

awk '
  !in_p && idx = index($0,"<p>") {
    in_p = 1
    $0 = substr($0,idx+4)
  }
  in_p && idx = index($0, "</p>") {
    seen_close = 1
    $0 = substr($0,0,idx-1)
  }
  in_p {print}
  seen_close {exit}
' file.html

Не будет работать, как ожидалось, если вы вложили абзацы, как

<p>
    Hi. Lorem Ipsum<br />
    dolor si amet […]
    <p>
        …
    </p>
</p>
<p>2nd paragraph</p>

XML/HTML очень сложно анализировать вручную: используйте анализатор HTML.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .