我正在使用以下命令删除文件中匹配项之前的所有文本:
sed -n '/sweet/,$p' file
它工作正常,但是我需要将“ sweet”更改为一个变量,因为我假设我需要使用双引号而不是单引号,但是当我运行此命令时:
sed -n "/$variable/,$p" file
我收到以下错误:
sed: -e expression #1, char 11: unexpected `,'
如何使此命令起作用?
答案 0 :(得分:3)
单引号告诉shell根本不执行任何扩展,并且sed
获得三个参数-n
,/sweet/,$p
和file
。
使用双引号时,变量会扩展。假设未设置variable=sweet
和p
,则第二次sed
调用得到以下三个参数:-n
,/sweet/,
和file
。地址说明符中,
后面没有任何内容是无效的,并且给您显示了错误。
如果要将(文字)$
和变量扩展混合在单个参数中,则几乎没有选择:
"/$variable/,\$p"
逃脱了$
"/$variable/"',$p'
或单引号和双引号的字符串部分的类似组合,以根据需要在其每个段中处理$
。答案 1 :(得分:1)
我会制动单引号,为变量使用双精度,然后重新打开单引号。
sed -n '/'"${var}"'/,$p' file
我知道这是可行的,但是我还没有真正使用它,所以我不知道这是否是正确的方法。