Как заменить многострочный текст в html-файле сценарием оболочки? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть 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

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

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

Ответы [ 3 ]

0 голосов
/ 02 апреля 2019
sed -Ei '
  /^\s*pre\s*\{\s*$/,/^\s*}\s*$/ {
     /^\s*line-height:\s*inherit\s*;\s*$/ s#^(.*)$#/*&*/#;
  }
' /path/file.html

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

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

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

PS -
не используйте -iE, что не получается.
-Ei работает.;)

PH

0 голосов
/ 02 апреля 2019

На основе ответа @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

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

0 голосов
/ 01 апреля 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...