Sed: замена цифр

9

Я пытаюсь написать несколько сценариев установки для установки / обновления Ubuntu. У меня проблемы с исправлением logrotate.d:

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

Я хочу измениться rotate nnnна rotate 99. Он должен работать для nnn, чтобы быть любым количеством цифр (обычно 1 или 2), но не влиять на postrotateстроку.

Я пробовал эти два, но ни один из них не делает то, что мне нужно (и я протестировал с nnn, состоящим из 1,2 или 3 цифр).

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
источник

Ответы:

4

rotate[0-9]*заменяет rotateноль или более цифр, что соответствует концу postrotate. rotate[0-9]заменяет только одну цифру. Кроме того, вам не хватает места после rotate. Я думаю, что это делает то, что вы хотите; он также обрабатывает отступы:

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

Добавьте -iопцию, sedесли вы хотите изменить файл на месте.

Жиль "ТАК - перестань быть злым"
источник