Исправление форматирования HTML с помощью простых сценариев оболочки
Программирование

Исправление форматирования HTML с помощью простых сценариев оболочки

Если вы пишете HTML в редакторе и вставляете в WordPress, часто добавляется раздражающее форматирование HTML. Используя простые сценарии оболочки, вы можете убрать это

Если вы часто пишете HTML в редакторе, а затем вставляете в WordPress, вы заметите, что иногда добавляются раздражающие теги форматирования (например, теги <span>). Используя простые сценарии оболочки, вы можете автоматически очистить это мусорное HTML-форматирование с помощью нескольких простых команд

Зачем использовать сценарии оболочки? Если вы новичок в программировании, гораздо лучше начать с малого. Вы не только с меньшей вероятностью сдадитесь, но и будете иметь возможность останавливаться и учиться по пути. Тем не менее, ваши первые программы могут быть действительно полезными, даже если они очень просты

Shell-сценарии – отличное место для начала кодирования именно по этой причине: легко составить что-то в пару строк кода, что сэкономит вам уйму времени. Давайте рассмотрим несколько рецептов, или ‘паттернов’, которые вы можете использовать в собственных сценариях

Почему Shell Scripting?

Во-первых, давайте начнем с определения ‘shell scripting’ как написания сценариев для запуска в оболочке Bash. Технически говоря, другие языки сценариев, такие как Powershell, также можно назвать ‘shell scripting’. Но зачем вообще фокусироваться на shell-сценариях в целом и на Bash-сценариях в частности?

  • С появлением подсистемы Windows для Linux оболочка Bash теперь совместима со всеми основными платформами ПК.(Она также включена в macOS и практически все дистрибутивы Linux ‘из коробки’). Она даже доступна на телефонах Android с помощью Termux, бесплатной загрузки с открытым исходным кодом из Google Play.
  • Shell-сценарии позволяют сосредоточиться на основах программирования, потому что самую тяжелую работу за вас выполняют команды, которые вы будете включать. Предположим, вы хотите сжать несколько файлов в традиционном настольном приложении, написанном на языке C. Вам придется либо написать небольшой код для использования совместимой программной библиотеки, которая выполнит эту работу, либо написать много кода с нуля, чтобы выполнить сжатие. В сценарии оболочки все, что вам нужно сделать, это выполнить команду tar для нужных файлов.
  • Вы можете разрабатывать небольшими шагами, в интерактивном режиме. Продолжая приведенный выше пример, скажем, что вы решили использовать tar для сжатия, но еще не уверены, какие из его опций вам нужны. Просто поиграйте с ними в подсказке, пока не получите нужный результат, а затем скопируйте/вставьте команду, которую вы использовали, в свой сценарий.

.

Учитывая вышесказанное, вот несколько идей полезных сценариев оболочки, которые можно создать с помощью всего пары строк кода. Мы создадим пару сценариев для расширения и без того значительных возможностей утилиты преобразования Pandoc

1. Сбор длинных списков параметров

Самый простой и понятный способ использования сценария оболочки – это использование его как ярлыка для существующей команды. Некоторые программы командной строки имеют тонну флагов, и их синтаксис не всегда понятен. Но вы можете взять одну из таких команд со всеми ее сложными опциями и поместить их в сценарий оболочки с именем, которое легче ввести. Рассмотрим следующую команду, которая запускает Pandoc на файле Markdown и создает файл ODT, используя файл шаблона:

pandoc -r markdown -w odt --reference-odt=/path/to/folder/containing/mscript-template.odt -o manuscript.odt manuscript.md

Я использую Pandoc на ежедневной основе, поскольку я пишу все в легкой разметке, такой как Markdown и Asciidoc. И все же при конвертации в ODT я набираю ‘odt-reference’ вместо ‘reference-odt’. Каждый. Одиночный. Время. Кроме того, путь к шаблону не автозаполняется, как в большинстве команд оболочки. Создание простого сценария может избавить от всех этих ошибок:

#! /bin/bash
pandoc -r docbook -w odt --reference-odt=/path/to/folder/containing/mscript-template.odt -o $1.odt $1

Первая строка скрипта направляет систему на использование оболочки Bash для его запуска. Следующая принимает первый аргумент в командной строке ( $1 ) и запускает Pandoc с набором флагов. Стоит отметить, что есть и другие способы сделать это, например, использование команды alias в Unix-системах. Но создание небольших сценариев оболочки означает, что вы можете держать их под рукой (например, в папке ~/bin), быстро копировать (или синхронизировать) их в другое место и изменять их с помощью любого текстового редактора. Сохраните свой скрипт с именем файла, которое легко запомнить и набрать (например.’markdown2odt.sh’). Не забудьте дать ему исполняемые права

2. Передача вывода для чистого HTML-форматирования

Соединение двух команд терминала с помощью символа трубы (‘|’) приводит к тому, что вывод первой команды используется в качестве ввода второй.(Если вы никогда не видели этого раньше, ознакомьтесь с нашим кратким руководством по командной строке). Но необходимость вводить две команды в правильном порядке и с правильными параметрами только усугубляет проблему, о которой мы только что говорили. Если обернуть эту двойную команду в сценарий оболочки, это будет намного удобнее

Один из приемов, который я использую в Pandoc, – это ‘чистка’ HTML-форматирования, или удаление всех встроенных стилей. Если вы когда-нибудь пытались экспортировать документ текстового процессора в HTML, вы можете увидеть тонну стилей (теги span ), которые добавляются в текст и среди текста

Формат Docbook XML не имеет соглашения для встроенных стилей, поэтому если мы преобразуем HTML в DocBook, все это форматирование будет выброшено. Затем мы можем использовать Pandoc для преобразования DocBook обратно в HTML, и мы получим красивый фрагмент разметки, который можно (например) вставить в WordPress. Вместо того чтобы делать это с помощью отдельных вызовов Pandoc, следующий сценарий связывает их вместе:

  1. Преобразовать экспортированный HTML-файл в DocBook, который не имеет встроенных стилей (до трубы).
  2. Преобразование DocBook обратно в то, что теперь является красивым, чистым HTML-форматированием (после трубы).

#! /bin/bash
pandoc -w docbook $1 | pandoc -r docbook -w html -o $1 -

Объяснение стандартного ввода/вывода

Приведенная выше команда использует концепции терминала ‘стандартный ввод’ и ‘стандартный вывод’. Если бы вы выполнили первую часть команды, то получили бы целую кучу XML, отображаемую в терминале. Причина в том, что мы не дали Pandoc никакого другого вывода (например, файла) для использования. Поэтому он использует единственное доступное ему средство: стандартный вывод, в данном случае терминал

С другой стороны, символ тире в конце второй команды Pandoc означает, что она должна использовать ‘стандартный ввод’. Запущенная сама по себе, вы будете встречены приглашением, где оболочка будет ждать, пока вы предоставите текст через стандартный ввод, набрав его на клавиатуре. Когда мы объединяем их, вы можете представить, как первая команда выплевывает кучу XML на терминал, где он сразу же передается во вторую команду в качестве ввода

В результате, если вы переименуете эту команду в ‘clean-html.sh’, вы сможете запустить ее на любом HTML-файле, чтобы избавиться от этих надоедливых стилей. Самое приятное, что Pandoc будет читать из файла, а затем перезаписывать его в конце, что означает, что не будет никаких временных файлов

3. Запуск программ на нескольких HTML-файлах

Некоторые программы позволяют указывать подстановочные знаки , такие как звездочка, в командной строке. Это позволяет, например, переместить все изображения JPG в папку ‘Изображения’:

mv *.jpg ~/Pictures

Но другие программы принимают на вход только один файл за раз, и Pandoc – одна из них. Так что же делать, если у нас есть целый каталог, полный экспортированных HTML-файлов, и мы хотим очистить HTML-форматирование? Нужно ли нам запускать наш скрипт ‘clean-html.sh’ для каждого из них вручную?

Нет, потому что мы не новички. Мы можем обернуть нашу команду в цикл ‘for-each’. Это позволит поочередно перейти к каждому HTML-файлу в текущем каталоге и выполнить над ним операцию очистки. Давайте также добавим небольшое сообщение через оператор echo , чтобы сообщить нам, что все файлы были обработаны:

for filename in./*.html
do
pandoc -w docbook $1 | pandoc -r docbook -w html -o $1 -
echo 'Working on $1. HTML is clean!'
done

Теперь, если у вас есть папка, полная ‘грязного’ HTML, вы можете запустить этот скрипт и получить в итоге сверкающе-чистый HTML-формат

Куда двигаться дальше

Если вы любите возиться, вам понравится shell-сценарий, потому что его всегда можно подправить. Некоторые идеи, как использовать эти шаблоны в качестве основы для других сценариев, включают следующее:

  • Добавление поддержки преобразования непосредственно из файла текстового процессора, поскольку Pandoc поддерживает ввод ODT и DOCX (т.е. цепочка становится ODT/DOCX > DocBook XML > HTML).
  • Объединение обоих чистильщиков HTML в один, таким образом, что если указан файл, то чистится именно он, в противном случае автоматически чистится все в текущем каталоге (добавляется работа с аргументами командной строки).
  • Предоставление пользователю дополнительных опций экспорта, например, PDF (добавляет варианты на основе ввода, с помощью операторов if-then или case).

Как видите, с помощью сценариев оболочки вы можете создавать вещи понемногу, тестируя их в подсказке и добавляя их в свои сценарии по мере выполнения

Что вы скажете, теперь shell-сценарии кажутся менее пугающими? Готовы ли вы попробовать свои силы в автоматизации скучных задач? Если вы решите попробовать, дайте нам знать, как это происходит, ниже в комментариях

Об авторе

Алексей Белоусов

Привет, меня зовут Филипп. Я фрилансер энтузиаст . В свободное время занимаюсь переводом статей и пишу о потребительских технологиях для широкого круга изданий , не переставая питать большую страсть ко всему мобильному =)

Комментировать

Оставить комментарий