sed заменяет строку каким-то заполнителем

Я довольно новичок в 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? Особенно с заполнителем типа * для любого вида номера / номера.

1
задан 8 June 2016 в 20:44

1 ответ

Можно сделать:

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
2
ответ дан 8 June 2016 в 20:44

Другие вопросы по тегам:

Похожие вопросы: