sed:替换数字

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

我已经尝试过这两个,但都没有满足我的需要(并且我测试了 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

答案1

答案2

rotate[0-9]*替换rotate后跟零个或多个数字,与 的结尾匹配postrotaterotate[0-9]仅替换一位数字。此外,您还缺少 后面的空格rotate。我认为这符合你的要求;它还处理缩进线:

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

如果您想就地更改文件,请添加该-i选项。sed

相关内容