为什么我的sed命令不能使用双引号?

时间:2019-06-18 22:59:58

标签: bash sed

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

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

它工作正常,但是我需要将“ sweet”更改为一个变量,因为我假设我需要使用双引号而不是单引号,但是当我运行此命令时:

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

我收到以下错误:

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

如何使此命令起作用?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

我会制动单引号,为变量使用双精度,然后重新打开单引号。

sed -n '/'"${var}"'/,$p' file

我知道这是可行的,但是我还没有真正使用它,所以我不知道这是否是正确的方法。