带有sed故障排除的未终止`s'命令

时间:2015-12-05 17:00:50

标签: linux bash sed

我有sed的问题。我想在多个文档中替换多行的整个特定行号。

这是1个特定文档中1个特定行的bash命令:

 BNAME=$(basename $FILE .pdb)
 psfgen1="pdb ./sedpdb/${BNAME}.pdb/"
 sed -i '8s/'.*'/'${psfgen1}'/' ./psfgen.inp

我收到此错误: sed:-e表达式#1,char 60:未终止的's'命令

有谁知道如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

我看错了两件事:

  1. 您尝试在sed命令中使用的字符串中有正斜杠。这些将被解释为命令的一部分,因此您应该使用不同的分隔符。
  2. *是未加引号的,因此shell会将其全局扩展为目录中所有文件的名称。
  3. 在字符串替换中可靠地使用shell变量是非常重要的,但可以使用this question的答案中显示的方法之一来完成。

    在您的情况下,看起来您可能会使用其他字符作为分隔符,例如@

    sed -i "8s@.*@${psfgen1}@" ./psfgen.inp