извлечь текст между двумя словами и в определенной строке - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь создать linux bash script для загрузки страницы html, извлечения чисел с этой страницы html и присвоения их переменной.

страница html имеет несколько строк, но меня интересуют следующие:

<tr>
      <td width="16"><img src="img/ico_message.gif"></td>
      <td width="180"><strong> TIME 1</strong></td>
      <td width="132">
        <div align="right"><strong>61</strong></div></td>
    </tr>
    <tr>
      <td width="16"><img src="img/ico_message.gif"></td>
      <td width="180"><strong> TIME 2</strong></td>
      <td width="132">
        <div align="right"><strong>65</strong></div></td>
    </tr>
  </table></td>

Каждый раз, когда я загружаю страницу, мне нужно прочитать два значения в строке 5 и 11 между strong> и </strong (61 ad 65 в этом примере; 61 и 65 в этом примере, но каждый раз они разные)

Два значения, извлеченные из html, должны иметь возможность назначать их двум переменным

Спасибо за любую идею

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Это может сработать для вас (GNU sed):

sed -rn '/TIME/{:a;N;5bb;11bb;ba;:b;s/.*TIME ([^<]*).*<strong>([^<]*).*/var\1=\2/p}' file

Используйте целое число, связанное с TIME в предыдущем коде, чтобы различать имена двух переменных.

0 голосов
/ 29 июня 2018

Предположим, у нас есть страница с именем page.html. Сначала вы можете выбрать строку с помощью grep, затем извлечь значение с помощью sed и, наконец, выбрать значения итеративно с помощью awk:

$ var0=$(cat page.html |\
    grep -Ee "<strong>[0-9]+</strong>" -o |\
     sed  -Ee "s/<strong>([0-9]+)<\/strong>/\1/g" |\
      awk 'NR%2==1')

$ var1=$(cat page.html |\
    grep -Ee "<strong>[0-9]+</strong>" -o |\
     sed  -Ee "s/<strong>([0-9]+)<\/strong>/\1/g" |\
      awk 'NR%2==0')

выход:

$ echo $var0
61
$ echo $var1
65
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...