Получить содержимое между парой тегов HTML, используя Bash - программирование
Подтвердить что ты не робот

Получить содержимое между парой тегов HTML, используя Bash

Мне нужно получить содержимое HTML между двумя указанными тегами, используя bash script. Например, имея код HTML ниже:

<html>
<head>
</head>
<body>
 text
  <div>
  text2
    <div>
        text3
    </div>
  </div>
</body>
</html>

Используя команду bash/script, учитывая тег body, мы получим:

 text
  <div>
  text2
    <div>
    text3
    </div>
  </div>

Спасибо заранее.

4b9b3361

Ответ 1

простая обработка текста не подходит для синтаксического анализа html/xml. Надеюсь, это может дать вам некоторую идею:

kent$  xmllint --xpath "//body" f.html 
<body>
 text
  <div>
  text2
    <div>
        text3
    </div>
  </div>
</body>

Ответ 2

Использование sed в shell/ bash, поэтому вам не нужно устанавливать что-то еще.

tag=body
sed -n "/<$tag>/,/<\/$tag>/p" file

Ответ 3

Лично мне очень полезно использовать команду hxselect (часто с помощью hxclean) из пакета html-xml-utils. Последний исправляет (иногда сломанный) HTML файл для исправления файла XML, а первый позволяет использовать селектор CSS для получения node (ей). Используя параметр -c, он разбивает окружающие теги. Все эти команды работают на stdin и stdout. Поэтому в вашем случае вы должны выполнить:

$ hxselect -c body <<HTML
  <html>
  <head>
  </head>
  <body>
    text
    <div>
      text2
      <div>
        text3
      </div>
    </div>
  </body>
  </html>
  HTML 

чтобы получить то, что вам нужно. Простой и простой.

Ответ 4

Забыв Bash из-за его ограничения, вы можете использовать nokogiri в качестве командной строки, как описано здесь.

Пример:

curl -s http://example.com/ | nokogiri -e 'puts $_.search('\''a'\'')'

Ответ 6

BASH, вероятно, является неправильным инструментом для этого. Попробуйте использовать Python script, используя вместо этого мощную Beautiful Soup.

Это будет больше работы, но в долгосрочной перспективе (здесь: через час) экономия времени будет компенсировать дополнительные усилия.