Сервер в кармане, или просто о сложном!

главная - Статьи - Linux, FreeBSD



Как исключить шаблон в Grep

Дата обновления: 23.12.2022

Теги: Linux

Предположим, есть конфиг, содержащий комментарии, начинающиеся с символа '#'. А нужно вывести только задействованные параметры. На помощь придет grep.

Опция "-v"

less /etc/default/saslauthd | grep -v "#"

START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="sasldb"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Опция -v дает указание оставить только то, что не соответствует шаблону. В данном случае, символу #.

man grep:
...
-v, --invert-match
              Invert the sense of matching, to select non-matching lines.

Конечно, надо быть аккуратным, ведь шаблону "#" соответствует также строки типа "mainParam=144 #some comment", то есть грепать надо с умом.

Опция "-w"

-w, --word-regexp
              Select only those lines containing matches that form whole words...

Опция -w используется для того, чтобы обозначить, что шаблон должен быть отдельным словом. Например, в конфиге postfix main.cf есть множетсво строк с опциями вида smtpd_recipient_restrictions, smtpd_sender_restrictions. Проверим, как работает grep:

# cat /etc/postfix/main.cf | grep 'smtpd'
smtpd_banner = SMTPD
smtpd_use_tls = yes
smtpd_tls_security_level=may
smtpd_tls_mandatory_protocols=TLSv1, TLSv1.1, TLSv1.2, !SSLv2, !SSLv3
...

Добавим в конфиг две строки (они неправильные с точки зрения postfix, потом я удалю их):

# test smtpd string
smtpd

# cat /etc/postfix/main.cf | grep -w 'smtpd'
# test smtpd string
smtpd

Все строки вида smtpd_* не вошли в вывод, потому что опция -w пропускает только те строки, где есть отдельное слово 'smtpd'.

 

Опции -w и -v можно комбинировать, если того требует задача.



Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?