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