sed substituir cadeia com algum tipo de espaço reservado

1

Sou bem novo no UNIX.

Estou tentando substituir maxretry = * no arquivo de configuração do fail2ban por maxtretry = 3 , para que todos os pacotes tenham no máximo. três tentativas até que o ip esteja bloqueado.

Eu sei que há toneladas de perguntas sobre sed , mas não encontrei nenhuma que respondesse à minha pergunta.

Eu conheço sed da seguinte forma:

sed -i 's/old-word/new-word/g' /etc/fail2ban/config.local

(Esqueci o nome do arquivo de configuração local)

sed é poderoso, mas eu não entendi. Ele substitui strings por regex, mas criar um regex é bem difícil para mim.

Eu tentei:

sed -i 's/"maxretry = *"/"maxretry = 3"/g' /etc/fail2ban/config.local

Como eu exclui nada foi alterado.

Alguém pode me ajudar a entender sed ? Especialmente com um espaço reservado como * para qualquer tipo de número / números.

    
por Ismoh 08.06.2016 / 09:38

1 resposta

2

Você pode fazer:

sed -Ei.bak 's/^([[:blank:]]*maxretry[[:blank:]]*=).*/ 3/' /etc/fail2ban/config.local
  • ^([[:blank:]]*maxretry[[:blank:]]*=) corresponde a qualquer espaço em branco (se houver) no início, depois a string maxretry e novamente qualquer espaço em branco, se presente, seguido por = e colocar todos eles no grupo capturado 1 referenciá-lo no padrão de substituição)

  • O resto é simplesmente correspondido por .*

  • O padrão de substituição, 3 , define a chave do grupo capturado, e usamos o valor como 3.

Isso definirá o valor de maxretry como 3.

Além disso, o arquivo original terá backup como /etc/fail2ban/config.local.bak e o arquivo modificado será /etc/fail2ban/config.local .

Se você não quiser o backup:

sed -Ei 's/^([[:blank:]]*maxretry[[:blank:]]*=).*/ 3/' /etc/fail2ban/config.local
    
por heemayl 08.06.2016 / 09:51