将变量传递给 sed

将变量传递给 sed

我不能不在表单中使用 shellsed变量$NUMBER。我的 shell 脚本中有这一行:

cat shared.txt sed 's/whatever1/$2 ... whatever2/' > shared2.txt

结果shared2.txt看起来像:

...$2....

我做错了什么?

答案1

尝试使用双引号而不是单引号:

sed "s/whatever1/$2 ... whatever2/" shared.txt > shared2.txt

答案2

虽然使用双引号有效,但在某些情况下这不会给出您想要的结果。例如,

t="bcd"
echo '123$tbcd' | sed "s/$t$t//"

(是的,这有点做作!)。您可以通过转义某些字符来避免这种情况:

echo '123$tbcd' | sed "s/\$t$t//"

但很容易错过这一点。在我看来,最安全的方法是将变量用双引号括起来(这样空格就不会中断 sed 命令)并用单引号将字符串的其余部分括起来(以避免转义某些字符的必要性):

echo '123$tbcd' | sed 's/$t'"$t"'//'.

相关内容