$ pcregrep -Mo 'pin\(ABC\) (\{([^{}]++|(?1))*\})' file
pin(ABC) {
a b c d e f {
abc
}
}
Если у вас нет pcregrep
, но есть GNU grep
, и он был построен с поддержкой шаблонов PCRE, и ваш файл не слишком велик и не содержит символов NUL, вы можете:
grep -zPo 'pin\(ABC\) (\{([^{}]++|(?1))*\})' file
Те ( pcregrep
и grep -P
) используют шаблоны PCRE, которые поддерживают рекурсивные операторы регулярных выражений.
pcregrep -M
включает многострочный режим (где pcregrep
может тянуть несколько строк по мере необходимости при сопоставлении с регулярным выражением), а grep -z
сообщает, что записи имеют значение NUL- разделены вместо строк .
Приведенный выше трюк заключается в операторе (? 1)
, который означает регулярные выражения внутри первой группы парен , поэтому у нас есть рекурсивное регулярное выражение: we ' повторное сопоставление {
, за которым следует последовательность из 0 или более ( *
) последовательностей символов без скобок ( [^ {}] ++
, ++
является притяжательной версией +
) или регулярным выражением во внешнем (...)
снова ( {
с последующим...).
Подробности см. На странице руководства для pcrepattern
. Это почти дословно скопировано из приведенного здесь примера.
Использование perl
:
perl -l -0777 -ne 'print $& while /pin\(ABC\) (\{([^{}]++|(?1))*\})/g'
(как и для grep
, он забирает весь файл в память).
что я могу сделать на групповом уровне, чтобы убедиться, что nginx будет читать эти файлы?
Не похоже, что будет какая-то особая проблема с помещением пользователя nginx
в группу разработчиков
:
В качестве корневого:
usermod -a -G developers nginx
Пользователь может быть в нескольких группах. Вы можете видеть, в каких группах nginx
в настоящее время находится:
grep nginx /etc/group
# Or more simply:
id nginx
Если постановка nginx
в develo
создает какую-то проблему, вам нужно создать новую группу, поместить в неё пользователя nginx
и developers
и убедиться, что передаваемые файлы имеют этот GID.
Обратите внимание, что вы должны снова войти в систему, прежде чем новые члены группы станут доступны. Для нелогин-аккаунтов (предположительно nginx
) вы можете просто использовать su
или запустить процесс, который делает то же самое (в этом случае должен работать сам nginx-сервер).