Sed: substituindo dígitos

8

Eu estou tentando escrever alguns scripts de instalação para quando eu instalar / atualizar o Ubuntu. Estou com problemas para corrigir 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 alterar rotate nnn para rotate 99 . Ele deve funcionar para que nnn seja qualquer número de dígitos (normalmente 1 ou 2), mas não afeta a linha postrotate .

Eu tentei esses dois, mas também não o que eu preciso (e testei com nnn sendo 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
    
por GrandSatrap 10.03.2012 / 17:26

2 respostas

9

sed 's/rotate [0-9]\+/rotate 99/'

link

    
por 10.03.2012 / 17:34
4

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

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

Adicione a opção -i a sed se você quiser alterar o arquivo.

    
por 10.03.2012 / 17:39