Как заменить многострочный текст в html-файле скриптом оболочки?

У меня есть html-файл, в котором я хочу заменить стиль с помощью сценария оболочки с помощью функции sed. Я хочу заменить:

    pre {
      font-size: inherit;
      line-height: inherit;
    }

с участием:

    pre {
      font-size: 18px;
      /*line-height: inherit;*/
    }

Я пробовал следующее:

    sed -i 's/pre {\n   font-size: inherit;\n   line-height: 
    inherit;\n}/pre {\n font-size: 18px;\n  /\*line-height: 
    inherit;\*/\n}/g' /path/file.html

который работает без ошибок, но не заменяет текст. Обратите внимание, что я включаю вкладки для точной настройки текстового шаблона. Я работаю на убунту 18.

Любое предложение будет очень признателен.

Ваш sed поддерживает вариант -z?

Walter A 01.04.2019 21:41

Привет @WalterA, видимо, он не поддерживает параметр -z

Pakin 01.04.2019 22:55

@WalterA, извините, я вижу, что опция sed -z поддерживается

Pakin 02.04.2019 00:14
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
3
444
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать согласованные ссылки на шаблоны в sed, например:

sed -i 's/line-height: inherit;//*&*//g' /path/file.html

  • Здесь мы используем line-height: inherit; для соответствия шаблону поиска. Вместо этого вы также можете расширить это как регулярное выражение

  • & используется для ссылки на соответствующий текст, и мы помещаем /* и */ в качестве окружающих символов

Здравствуйте, @akskap, большое спасибо за ваш ответ, я думаю, что мне следует быть более точным с текстовым шаблоном, потому что в противном случае он заменяет другие совпадающие строки. я продолжаю пытаться

Pakin 01.04.2019 22:57
Ответ принят как подходящий
sed -Ei '
  /^\s*pre\s*\{\s*$/,/^\s*}\s*$/ {
     /^\s*line-height:\s*inherit\s*;\s*$/ s#^(.*)$#/*&*/#;
  }
' /path/file.html

Первая пара шаблонов устанавливает диапазон, в котором будет выполняться блок кода внутри фигурок — от pre { до }.

Внутри блока шаблон устанавливает, какие строки будут отредактированы заменой, так что он комментирует только директивы line-height.

При совпадении он комментирует всю строку (сохраняя пробелы).

P.S. -
не используйте -iE, это не работает.
-Эй работает. ;)

РН

Спасибо, это очень хорошо работает, чтобы прокомментировать часть / * line-height: inherit; * / Я новичок с шаблонами в оболочке, теперь мне нужно изменить ваш ответ, чтобы изменить часть font-size: 18px;

Pakin 02.04.2019 00:19

Читайте, перечитывайте, изучайте и усваивайте система сопоставления шаблонов регулярных выражений. Потратьте время и поэкспериментируйте, в частности, на замены. Затем отредактируйте приведенное выше, пока оно не сделает то, что вам нужно. Когда/если у вас возникнут проблемы, опубликуйте усилия и результат в качестве дополнения к исходному сообщению с новым комментарием, и мы настроим его для вас. :D

Paul Hodges 02.04.2019 15:15

Основываясь на ответе @PaulHodges, это отлично работает:

    sed -Ei '/^\s*pre\s*\{\s*$/,/^\s*}\s*$/ {/^\s*font-size:\s*inherit\s*;\s*$/ s#^(.*)$#    
    font-size: 18px;#; /^\s*line-height:\s*inherit\s*;\s*$/ s#^(.*)$#/*&*/#;}' /path/file.html

Спасибо всем за ваши ответы!

Молодец. :) Может быть принять решение? Есть еще вопросы?

Paul Hodges 02.04.2019 15:17

Другие вопросы по теме