web-dev-qa-db-ja.com

Sed:数字を置き換える

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行には影響しません。

私はこれら2つを試しましたが、必要なものはどちらも実行していません(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
9
GrandSatrap
12
cjc

rotate[0-9]*は、rotateの後ろに0個以上の数字が続き、postrotateの末尾と一致します。 rotate[0-9]は1桁のみを置き換えます。さらに、rotateの後にスペースがありません。これはあなたが望むことをするものだと思います。インデントされた行も処理します。

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

-iオプションをsedに追加して、ファイルをその場で変更したい場合。