Sed: reemplazando dígitos

9

Estoy tratando de escribir algunos scripts de instalación para cuando instalo / actualizo Ubuntu. Tengo problemas para arreglarlo logrotate.d:

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

Quiero cambiar rotate nnna rotate 99. Debe funcionar para que nnn tenga cualquier número de dígitos (normalmente 1 o 2), pero no afecta la postrotatelínea.

He probado estos dos pero tampoco hace lo que necesito (y probé con nnn de 1,2 o 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
fuente

Respuestas:

4

rotate[0-9]*reemplaza rotateseguido de cero o más dígitos, que coincide con el final de postrotate. rotate[0-9]reemplaza solo un dígito. Además te estás perdiendo el espacio después rotate. Creo que esto hace lo que quieres; También maneja líneas sangradas:

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

Agregue la -iopción sedsi desea cambiar el archivo en su lugar.

Gilles 'SO- deja de ser malvado'
fuente