Простой способ извлечь значение из HTML

Поэтому Ваша оболочка запускает другую оболочку для запущения скрипта. Вторая оболочка изменяет свой рабочий каталог и затем выходит к первой оболочке, которая никогда не изменяла ее каталог.

Чтобы заставить Вашу текущую оболочку запустить скрипт, назовите это этим путем:

. scriptname

(заметьте точку). Конечно, необходимо будет вынуть это exit 0.

Можно также записать функцию оболочки. Посмотрите ksh(1).

2
13.11.2014, 01:26
4 ответа

Я понятия не имею, что Wget Вы говорите, но я думаю, что вы хотите скачать файл. Если так, да, вы можете скачать его и разбирать его без промежуточного файла Temp:

$ value=$(wget -O - http://example.com/file.html | grep -oP 'strValue="\K[^"]+')
$ echo $value
57
4
27.01.2020, 21:49
cat input | grep -o strValue=".*" | sed 's/strValue=//g' | sed 's/"//g'
-1
27.01.2020, 21:49

Вы можете извлечь значение в своем примере с помощью grep и присвоить его переменной следующим образом

$ x=$(wget -0 - 'http://foo/bar.html' | grep -Po '<value.*strValue="\K[[:digit:]]*')
$ echo $x
57

Объяснение:

  • $(): команда substitution
  • grep -P: grep с разрешением Perl regexp
  • grep -o: grep показывает только совпадающую часть строки
  • \K: не показывайте в выводе ничего, что совпадало до этого момента
  • wget -O -: печатает загруженный документ на стандартный вывод (не в файл)

Однако, для общего подхода лучше использовать специальный парсер для html-кода.

10
27.01.2020, 21:49
  1. Помимо метода wget -O -..., вы также можете использовать curl -Ss..., чтобы избежать проблем с временным файлом.

  2. Нижеследующее иллюстрирует использование pup(https://github.com/ericchiang/pup), который поддерживает язык запросов на основе CSS -.

a )Чтобы извлечь «текстовое» значение тега <value>:

pup 'value text{}'  # yields 572

b )Чтобы извлечь значение атрибута strValue тега <value>:

pup 'value attr{strvalue}' # yields 57
2
27.01.2020, 21:49

Теги

Похожие вопросы