Sed: substituindo dígitos

9

Estou tentando escrever alguns scripts de instalação para quando instalar / atualizar o Ubuntu. Estou tendo problemas com a correção logrotate.d:

/var/log/ufw.log
{
rotate 7
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
    reload rsyslog >/dev/null 2>&1 || true
endscript
}

Eu quero mudar rotate nnnpara rotate 99. Ele deve funcionar para que nnn seja qualquer número de dígitos (normalmente 1 ou 2), mas não afeta a postrotatelinha.

Eu tentei esses dois, mas nem o que eu preciso (e testei com nnn com 1,2 ou 3 dígitos).

sudo sed  's/rotate[0-9]*/rotate 99/' /etc/logrotate.d/ufw
sudo sed  's/^rotate[0-9]/rotate 99/' /etc/logrotate.d/ufw
GrandSatrap
fonte

Respostas:

4

rotate[0-9]*substitui rotateseguido por zero ou mais dígitos, que corresponde ao final de postrotate. rotate[0-9]substitui apenas um dígito. Além disso, você está perdendo o espaço depois rotate. Eu acho que isso faz o que você quer; Ele também lida com linhas recuadas:

sudo sed 's/^\( *rotate *\)[0-9][0-9]*/\1 99/' /etc/logrotate.d/ufw

Adicione a -iopção sedse desejar alterar o arquivo no local.

Gilles 'SO- parar de ser mau'
fonte