首页 > 解决方案 > 为什么我的 sed 命令不能使用双引号?

问题描述

我正在使用以下命令删除文件中匹配之前的所有文本:

sed -n '/sweet/,$p' file

它工作得很好,但我需要将 'sweet' 更改为一个变量,因为它是一个变量,我假设我需要使用双引号而不是单引号,但是当我运行这个命令时:

sed -n "/$variable/,$p" file

我收到以下错误:

sed: -e expression #1, char 11: unexpected `,'

我怎样才能使这个命令工作?

标签: bashsed

解决方案


单引号告诉 shell 根本不执行任何扩展并sed获取三个参数-n,/sweet/,$pfile.

使用双引号时,变量会被扩展。假定variable=sweet且未p设置,第二次sed调用得到以下三个参数:-n/sweet/,file. 后面没有任何内容的地址说明符,无效,并给出了您所看到的错误。

如果您想$在单个参数中混合(文字)和变量扩展,您几乎没有选择:

  • "/$variable/,\$p"这逃脱了$
  • "/$variable/"',$p'或类似的单引号和双引号字符串部分的组合,以$根据需要在其每个段中处理。

推荐阅读