You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed移除nginx.conf中的'$request_body'(含单引号)

解决nginx.conf中移除带单引号的'$request_body'问题

之前命令失效的原因

  • 第一个命令sed s/'\$request_body\'// nginx.conf:shell中单引号内部无法转义单引号,导致shell解析脚本时出错,sed未收到正确的匹配规则。
  • 第二个命令sed s/\'$request_body\'// nginx.conf:$request_body会被shell当作环境变量展开,若该变量未定义则会被替换为空,实际sed执行的是s/''//,自然匹配不到目标内容。

正确的sed命令

以下两种方式均可实现需求,核心是让shell不解析$request_body中的$,同时正确匹配单引号:

方法1:shell单引号转义写法

sed -i 's/'\''$request_body'\''//g' nginx.conf
  • 解释:'\''是shell中在单引号包裹字符串里插入单引号的标准写法(关闭单引号→转义单引号→重新打开单引号),最终sed接收的匹配规则是s/'$request_body'//g,全局移除所有'$request_body'内容。
  • -i选项:直接修改原文件,若仅需预览修改结果可去掉该选项,输出到终端查看。

方法2:使用八进制转义表示单引号

sed -i 's/\047$request_body\047//g' nginx.conf
  • 解释:\047是单引号的八进制ASCII转义码,在sed的单引号脚本中可直接使用,避免shell的单引号转义问题,效果与方法1一致。

效果验证

假设nginx.conf中有如下行:

log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$request_body"'

执行命令后会变为:

log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'

内容的提问来源于stack exchange,提问作者Mithun j

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:00:36