小编Abe*_*ker的帖子

使用 sed 替换正则表达式捕获组内容

我正在尝试以编程方式编辑我的 nginx.conf 文件,其中包含如下一行:

        access_log /var/log/nginx/access.log;
Run Code Online (Sandbox Code Playgroud)

我想看起来像这样:

        access_log /dev/stdout;
Run Code Online (Sandbox Code Playgroud)

我相信正则表达式^\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/'
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

sed: -e expression #1, char 45: invalid reference \1 on `s' command's RHS
Run Code Online (Sandbox Code Playgroud)

如果我尝试sed -r,则没有错误,但输出不是我所期望的:

 /var/log/nginx/access.log\/dev\/stdout
Run Code Online (Sandbox Code Playgroud)

我试图对捕获组和诸如此类的东西保持聪明,而不是直接搜索“access_log /var/log/nginx/access.log;” 以防分发更改默认日志文件位置。

sed

29
推荐指数
3
解决办法
7万
查看次数

标签 统计

sed ×1