Sed:替换数字

Gra*_*rap 9 scripting sed regular-expression

我正在尝试为安装/升级 Ubuntu 时编写一些安装脚本。我在修复时遇到问题logrotate.d

/var/log/ufw.log
{
rotate 7
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
    reload rsyslog >/dev/null 2>&1 || true
endscript
}
Run Code Online (Sandbox Code Playgroud)

我想更改rotate nnnrotate 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
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 5

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

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

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