Я довольно новичок в UNIX.
Я пытаюсь заменить maxretry = *
в файле конфигурации fail2ban на maxtretry = 3
, чтобы в каждом отдельном пакете было макс. три попытки, пока IP не заблокирован.
Я знаю, что есть множество вопросов о sed
, но я не нашел ни одного, который бы ответил на мой вопрос.
Я знаю sed
как следующее:
sed -i 's/old-word/new-word/g' /etc/fail2ban/config.local
(я забыл имя локального файла конфигурации)
sed
мощно, но я не понял этого. Он заменяет строки на регулярное выражение, но создать регулярное выражение довольно сложно для меня.
Я попытался:
sed -i 's/"maxretry = *"/"maxretry = 3"/g' /etc/fail2ban/config.local
Как я исключил, ничего не изменилось.
Может ли кто-нибудь помочь мне понять sed
? Особенно с заполнителем типа * для любого вида номера / номера.
Можно сделать:
sed -Ei.bak 's/^([[:blank:]]*maxretry[[:blank:]]*=).*/\1 3/' /etc/fail2ban/config.local
^([[:blank:]]*maxretry[[:blank:]]*=)
соответствия какие-либо пробелы (если таковые имеются) в запуске, затем строка maxretry
и с другой стороны какой-либо пробел, если существующий сопровождаемый =
и помещенный все они в полученной группе 1 (мы отошлем его в заменяющем шаблоне)
Остальное просто подобрано .*
, заменяющий шаблон, \1 3
, устанавливает ключ от полученной группы, \1
, и мы использовали значение в качестве 3.
Это установит эти maxretry
значение к 3.
Также исходный файл будет резервным копированием как /etc/fail2ban/config.local.bak
, и измененный файл будет /etc/fail2ban/config.local
.
, Если Вы не хотите резервное копирование:
sed -Ei 's/^([[:blank:]]*maxretry[[:blank:]]*=).*/\1 3/' /etc/fail2ban/config.local