Sed: remplacement des chiffres

9

J'essaie d'écrire des scripts d'installation pour l'installation / la mise à niveau d'Ubuntu. J'ai du mal à réparer logrotate.d:

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

Je veux changer rotate nnnpour rotate 99. Il doit fonctionner pour que nnn ait un nombre quelconque de chiffres (normalement 1 ou 2), sans affecter la postrotateligne.

J'ai essayé ces deux mais je n'ai pas non plus ce dont j'ai besoin (et j'ai testé avec nnn étant 1,2 ou 3 chiffres).

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
la source

Réponses:

4

rotate[0-9]*remplace rotatesuivi de zéro ou plusieurs chiffres, ce qui correspond à la fin de postrotate. rotate[0-9]remplace un seul chiffre. De plus, vous manquez l'espace après rotate. Je pense que cela fait ce que vous voulez; il gère également les lignes en retrait:

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

Ajoutez l' -ioption à sedsi vous souhaitez modifier le fichier en place.

Gilles 'SO- arrête d'être méchant'
la source