Sed: выскабливание ряда чисел

Можно ли указать диапазон чисел (1-31) в пределах того места, где я соответствую <strong> тег? Тег в выводе выглядит как: <strong>21. Infinite Safari Balls</strong>,

отредактированный

#!/bin/bash

wget -q -O - 'goo.gl/vfYA94' | \
  sed -En '/<strong>([1-9]|[12][0-9]|3[01])/,/<\/blockquote>/p' | \
  sed -e :a -e 's/<[^>]*>//g;/</N;//ba'

1 ответ

Решение

Насколько я понимаю, вы хотите распечатать блок строк, где в первой строке есть текст <strong>NN. где NN - число от 1 до 31 с остановкой на следующей строке, содержащей </blockquote>, sed не очень хорошо разбирается в числах, но вы можете добиться желаемого эффекта с помощью регулярных выражений:

wget -q -O - 'goo.gl/vfYA94' | sed -En '/<strong>([1-9]|[12][0-9]|30|31)\./,/<\/blockquote\>/p'

Чтобы уменьшить количество обратных косых черт в регулярном выражении, я использовал -E опция для расширенных регулярных выражений. -E Опция распознается как в Mac OSX, так и в GNU/Linux, хотя версия GNU sed только документы использования -r для этого.

Другие вопросы по тегам