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
для этого.