我正在尝试以编程方式编辑我的nginx.conf文件,其中包含如下行:
access_log /var/log/nginx/access.log;
我想看起来像这样:
access_log /dev/stdout;
我相信正则表达式^\s*access_log([^;]*);
将捕获/var/log/nginx/access.log
捕获组中的部件,但是我不确定如何用sed正确替换捕获组?
我试过了
echo " access_log /var/log/nginx/access.log;" | sed 's/^\s*access_log([^;]*);/\1\\\/dev\\\/stdout/'
但我得到了错误:
sed: -e expression #1, char 45: invalid reference \1 on `s' command's RHS
如果我尝试sed -r
,则没有错误,但是输出不是我期望的:
/var/log/nginx/access.log\/dev\/stdout
我试图对捕获组和其他方面变得聪明,而不是直接搜索“ access_log /var/log/nginx/access.log;”。如果发行版更改了默认日志文件位置。
@Costas如果您能回答这个问题,我会投票给您,因为它也可以!
—
安倍·沃克
sed '/access_log/s|/[^;]\+|/dev/stdout|'