У меня есть 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.
Любое предложение будет очень признателен.
Привет @WalterA, видимо, он не поддерживает параметр -z
@WalterA, извините, я вижу, что опция sed -z поддерживается






Вы можете использовать согласованные ссылки на шаблоны в sed, например:
sed -i 's/line-height: inherit;//*&*//g' /path/file.html
Здесь мы используем line-height: inherit; для соответствия шаблону поиска. Вместо этого вы также можете расширить это как регулярное выражение
& используется для ссылки на соответствующий текст, и мы помещаем /* и */ в качестве окружающих символов
Здравствуйте, @akskap, большое спасибо за ваш ответ, я думаю, что мне следует быть более точным с текстовым шаблоном, потому что в противном случае он заменяет другие совпадающие строки. я продолжаю пытаться
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;
Читайте, перечитывайте, изучайте и усваивайте система сопоставления шаблонов регулярных выражений. Потратьте время и поэкспериментируйте, в частности, на замены. Затем отредактируйте приведенное выше, пока оно не сделает то, что вам нужно. Когда/если у вас возникнут проблемы, опубликуйте усилия и результат в качестве дополнения к исходному сообщению с новым комментарием, и мы настроим его для вас. :D
Основываясь на ответе @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
Спасибо всем за ваши ответы!
Молодец. :) Может быть принять решение? Есть еще вопросы?
Ваш
sedподдерживает вариант-z?