Важнее удовлетворение от того, что имеешь, чем вечная гонка за тем, чего хочешь

Linux: вывести содержимое конфигурационного файла без комментариев и пустых строк

Иногда, из многословных конфигурационных файлов сервисов Linux, хочется получить быструю "выжимку", без комментариев и пустых строк. К примеру, в основном файле настроек Postfix - main.cf, основную часть составляют комментарии. Как отфильтровать вывод от комментариев и повторяющихся строк при помощи утилит командной оболочки Linux?

Как вариант, вот так (здесь <file.conf> это файл, вывод которого мы хотим отфильтровать от комментариев):


grep -vE '^[[:space:]]*#' <file.conf> | cat -s

Теперь, подробности: grep позволяет не выводить строки начинающиеся на символ #, или набор символов пустоты и дальнейшего #, а cat помогает избавиться от повторяющихся пустых строк (правда не всегда корректно, но достаточно хорошо) (-s это опция squeeze, сжатие).

Если вы часто пользуетесь чтением таких конфиграций и работаете в bash, то можно оформить этот конвеер команд как bash функцию и иметь её всегда под рукой. К примеру, я добавил к себе в ~/.bashrc вот такие строки (назвал функцию как brief):


brief ()
{
    grep -vE '^[[:space:]]*#' "$1" | cat -s
}

Перечитал текущую конфигурацию профиля bash:


source ~/.bash_profile

Теперь могу пользоваться brief, прямо из консоли:


brief /etc/postfix/main.cf