2

У меня есть скрипт, который принимает входные данные от wget или аналогичные и ищет по ним ключевые слова, используя grep . (Я обещаю, что не пытаюсь анализировать HTML с помощью регулярных выражений, это просто удобный способ эмулировать поведение обнаружения контента, которое мы имеем в другом, гораздо более сложном продукте.) Это прекрасно работает, пока контент HTML не слишком сильно минимизирован. Когда это так, строки могут стать очень длинными (более 50 кБ в некоторых случаях, которые я видел), и grep задыхается от них.

Чтобы исправить это, я хотел бы иметь возможность свернуть или переопределить отступ HTML, чтобы он был распределен по нескольким строкам. Однако для того, чтобы скрипт дал точные результаты, я должен быть в состоянии сделать это, не изменяя содержание. Это означает, что он не может исправлять недействительные или незамкнутые теги и должен складываться только между элементами, а не внутри них.

Эти два требования, по-видимому, исключают все утилиты HTML-tidying или prettifying, которые я нашел.

Существуют ли какие-либо утилиты оболочки на основе UNIX, модули perl/python/ruby или аналогичные, которые могут сделать это для меня?

В качестве альтернативы, так как все, что мне нужно, это добавить несколько новых строк между тегами, есть ли способ, которым я могу полу-надежно сделать это сам?

4 ответа4

1

Хорошо, для тех, кто в этом нуждается, я записываю предложения, сделанные в этой замечательной теме (на случай, если эта ссылка отключится, в соответствии с рекомендациями StackExchange):

  • HTB 2.0 - на основе DOS - http://www.digital-mines.com/htb/

  • Tabifier - поддерживает синтаксис в стиле CSS, HTML и C (включая Javascript) - http://tools.arantius.com/tabifier

  • HTML-Kit - полнофункциональный бесплатный редактор HTML, работающий в Windows, вам необходимо настроить параметры TIDY [Инструменты / Проверить код с помощью Tidy / Добавить новую конфигурацию], снять все переключатели, кроме "Вывести только содержимое тела" и «Преобразовать не пробел между сущностями ", затем перейдите в раздел Действия / Инструменты / HTML Tidy / Отступ тегов или украсить - http://www.chami.com/html-kit/

  • SCREEM - только для Linux -

  • NetBeans - «После открытия HTML-файла с помощью NetBeans нажмите" Источник ", затем выберите" Формат ". Вот и все. "-

  • HTML / XHTML Beautifier WebmasterGate - онлайн-инструмент - http://www.webmastergate.com/html-beautifier/

  • Aptana Studio (версия 2.0.4) - «Выберите" Правка ">" Формат "или нажмите Ctrl-Shift F, чтобы отформатировать HTML-код. Функцию форматирования можно настроить в Windows> "Предпочтения", затем выберите "Aptana"> "Редакторы"> "HTML"> "Форматирование", нажмите "Изменить", чтобы добавить теги, которые не должны занимать новую строку, а затем сохранить их как новое предпочтение. "-

  • UniversalIndentGUI - внутреннее использование HTB Beautifier. При запуске Notepad++ перейдите в раздел "Плагины"> "Диспетчер плагинов"> "Показать диспетчер плагинов", выберите UniversalIndentGUI из доступного списка, чтобы установить его.

  • привести в порядок эти варианты:

(текст наполнителя, поскольку механизм уценки, кажется, имеет проблему, когда код следует за маркерами)

[HTML, XHTML, XML Options]
anchor-as-name:no
doctype:omit
drop-empty-paras:no
fix-backslash:no
fix-bad-comments:no
fix-uri:no
input-xml:yes
join-styles:no
lower-literals:no
preserve-entities:yes
quote-ampersand:no
quote-nbsp:no

[Diagnostics Options]
show-warnings:no

[Pretty Print Options]
indent:yes
indent-spaces:3
tab-size:3

[Miscellaneous Options]
quiet:yes

Мне еще предстоит опробовать эти варианты (input-xml: yes и force-output: yes предложения по настройке HTML-кода приведены выше https://stackoverflow.com/questions/7151180/use-html-tidy-to-just- indent-html-code работает для моей непосредственной цели), обновлю этот ответ, если я это сделаю.

0

Запустите файл через HTML Tidy.

Например:

curl http://superuser.com | tidy -i | less

-i для отступа ввода.

0

Самый простой способ сделать это без разбора / исправления документа - это найти закрывающий тег, за которым следует открывающая угловая скобка или пробел, и вставить новую строку. Ищи:

(</[^>]+>)(<|\s)

и заменить на

$1\n$2

Вам все равно нужно будет вручную проверить каждый выходной документ и убедиться, что он ничего не сломал, но это должно работать в большинстве случаев. Это не будет хорошим выводом, но это должно убить 50 КБ строк.

0

Другой вариант - использовать Pup без аргументов:

pup

В xmllint --html использует анализатор HTML, а --format переформатирует ввод. Черта для STDIN не может быть опущена.

xmllint --format --html -

XmlStarlet также поддерживает использование анализатора HTML. fo это сокращение от format . Смотрите xml fo -h для помощи.

xml fo --html

Основная реализация tidy не поддерживает HTML5, но tidy-html5 поддерживает. brew install tidy-html5 устанавливает tidy-html5 как /usr/local/bin/tidy в OS X.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .