Sed: Ziffern ersetzen

9

Ich versuche, einige Installationsskripte für die Installation / Aktualisierung von Ubuntu zu schreiben. Ich habe Probleme beim Reparieren logrotate.d:

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

Ich möchte ändern rotate nnnzu rotate 99. Es muss funktionieren, damit nnn eine beliebige Anzahl von Ziffern (normalerweise 1 oder 2) hat, die postrotateZeile jedoch nicht beeinflusst .

Ich habe diese beiden ausprobiert, aber auch nicht das, was ich brauche (und ich habe getestet, dass nnn 1,2- oder 3-stellig ist).

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
quelle

Antworten:

4

rotate[0-9]*ersetzt, rotategefolgt von null oder mehr Ziffern, was dem Ende von entspricht postrotate. rotate[0-9]ersetzt nur eine Ziffer. Außerdem fehlt dir der Platz danach rotate. Ich denke, das macht was du willst; Es werden auch eingerückte Zeilen verarbeitet:

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

Fügen Sie die -iOption hinzu, sedwenn Sie die vorhandene Datei ändern möchten.

Gilles 'SO - hör auf böse zu sein'
quelle