как вывести html в файл с помощью xmlint?

Каким бы ни был этот сценарий, он использует значение $DISPLAY, чтобы определить, работает ли он в среде X11 или нет (, работает ли сценарий, например, в среде X11. окружение рабочего стола, $DISPLAYбудет установлено ). Его вообще не волнует реальная стоимость.

  • Если он работает в X11, он устанавливает DIALOGв Xdialog, что предположительно является программой X11 для отображения диалоговых окон.

  • Если он не работает в X11 (, например, на безголовой машине или в сеансе SSH -), он устанавливает DIALOGв dialog, что предположительно является проклятием (или, по крайней мере, текстовая -программа на основе )для отображения диалоговых окон.

Позже сценарий может использовать $DIALOGдля отображения диалогового окна, подходящего для пользователя.

2
03.01.2019, 01:15
1 ответ

Я думаю, что при использовании опции --htmlвxmllintигнорируются некоторые другие опции, такие как --formatи --output. (Пробовал сlibxml2v2.9.4, поставляемой с macOS High Sierra, и с v2.9.10 от Homebrew .)

Вместо этого, чтобы записать вывод xmllintв файл, вы можете перенаправить его стандартный поток вывода, используя оператор перенаправления>("больше -чем" ).

Синтаксис

xmllint --html input.html > output.html

Пример

xmllint --html --xpath "//p" http://example.com > output.html 2>/dev/null

Опции/аргументы:

  • --html— анализировать ввод как HTML.
  • --xpath "//p"— Запрос XPath, выбирающий все теги <p>из ввода.
  • http://example.com— входной файл, в данном случае загруженный напрямую с указанного URL.
  • > output.html— перенаправить стандартный поток вывода (stdout )в указанный файл.
  • 2>/dev/null— необязательный :подавлять стандартный поток ошибок (stderr )с терминала, перенаправляя его на нулевое устройство(/dev/null).

(См. этот ответ для хорошей шпаргалки по перенаправлению вывода/ошибки.)

HTTPS

Обратите внимание, что xmllintне поддерживает HTTPS в настоящее время (, как указано в этом вопросе). Вместо этого вы можете использовать другую утилиту, такую ​​какcurlили wget, чтобы сначала загрузить файл, а затем направить его на стандартный ввод xmllintс помощью|(«трубы»/«вертикальной полосы» ). оператор управления и-("дефис/минус" )для xmllintфайлового аргумента.

curl --silent "https://example.com" | xmllint --html --xpath "//p" - > output.html 2>/dev/null

Опции/аргументы:

  • --silentили -s— подавлять curlсообщения о прогрессе/ошибках (, которые в противном случае могли бы быть обработаны синтаксическим анализатором xmllint).
  • "https://example.com"— входной файл, который curlзагрузит (по HTTPS, в данном случае )и передаст xmllint. (Используйте кавычки, если URL-адрес содержит &или другие специальные символы.)
  • |— направить стандартный вывод предыдущей команды(curl)на стандартный ввод следующей команды(xmllint).
  • --html— анализировать ввод xmllintкак HTML.
  • --xpath "//p"— Запрос XPath, выбирающий все теги <p>из ввода.
  • -xmllintполучает ввод из стандартного потока ввода (stdin )(, то есть из вывода curl), а не из файла или URL-адреса.
  • > output.html— перенаправить стандартный поток вывода xmllint's (stdout )в указанный файл.
  • 2>/dev/null— необязательный :подавлять xmllintстандартный поток ошибок (stderr )с терминала, перенаправляя его на нулевое устройство(/dev/null).

(См. этот ответ для хорошего списка операторов управления/перенаправления.)

3
20.04.2020, 06:03

Теги

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