在sed中使用带有特殊字符的变量

时间:2015-10-29 10:08:56

标签: bash variables sed

我删除了变量的最后一个斜杠:

v="/my/path/"
echo $v | sed 's/\/$//' # echoes /my/path

现在我想删除变量末尾的模式。此模式应在另一个变量中设置:

pattern="/"
v="/my/path/"
echo $v | sed 's/"$pattern"$//'  # echoes /my/path/

它不起作用。我尝试逃避特殊字符,例如" /" :

echo $v | sed 's/\"$pattern"$//'  # echoes /my/path/

没有预期结果。

我该怎么办?

1 个答案:

答案 0 :(得分:3)

单引号内没有参数扩展,但在双引号内。 使用

sed "s,$pattern\$,,"

但是,要从变量的末尾删除模式,为什么不使用shell的机制呢?这避免了昂贵的分叉和管道:

$ v="/my/path/"
$ echo ${v%/}
/my/path

这也适用于另一个持有模式的变量:

$ pattern="/"
$ echo ${v%$pattern}
/my/path