У меня есть файл CSS, который содержит набор правил, обернутых в @critical rule, содержащую критические стили, содержимое которых я хочу извлечь для встраивания:
@critical {
.foo {
...
}
@media bar {
...
}
}
Я пытаюсь выполнить извлечение с использованием sed
поиска и замены с помощью следующего регулярного выражения (я нахожусь на Ma c, отсюда и флаг -E):
sed -i '' -E 's,@critical[^{]*{\s*((.|\s)*)[^}]*},\1,g' style.css
Фактически я пытаюсь заменить весь @critical Правило только с его содержанием (соответствует группе 1). Регулярное выражение critical[^{]*{\s*((.|\s)*)[^}]*}
само по себе прекрасно работает, когда я подключаю его к RegExr , но я не могу заставить его работать в контексте приведенной выше команды sed
. Что я делаю неправильно?
Большое спасибо заранее.
—————
Редактировать:
С тех пор я узнал что sed
не поддерживает многострочное регулярное выражение, которое объясняет проблему, с которой я сталкиваюсь. Если минимизировать CSS (фактически превращая его в одну строку текста), чтобы он работал под sed
, я все равно был бы признателен за то, что кто-то указал мне на решение, которое работает с неминифицированным многострочным файлом CSS (perl? Awk?).