在linux中使用'sed'时出现额外字符错误

时间:2012-11-28 17:19:33

标签: linux sed

我的课程包括编写一个linux脚本来从一个伪垃圾文件夹中“恢复”文件。我已经完成了这个,看起来应该工作,但事实并非如此。相反,我收到的错误是:

  

sed:-e表达式#1,字符2:命令后的额外字符

但我不明白为什么,因为我不在代码中的任何地方使用-e表达式。然而,我的大脑因为长时间盯着代码而被炒掉,这可能只是一个我无法看到的愚蠢错误。任何帮助将非常感激!

这是我的代码:

#!/bin/sh

if [ "$1" = "-n" ]
then

##if command is used with -n, prompts user to enter a new location for the file

  cd ~/my-documents/mydir01/trashbin
  restore=`sed "$2" ~/my-documents/mydir01/locations`
  name=`basename "$restore"`

  echo $name
  echo "Enter new location for this file."
  read loc
  echo $loc
  mv -i `"$name" "$newloc"/"$name"`

else

##file will be restored to its previous location

  cd ~/my-documents/mydir01/trashbin
  restore=`sed "$1" ~/my-documents/mydir01/locations`
  loc=`dirname "$restore"`
  echo $loc
  name=`dirname "$restore"`
  mv $1 $name
fi

1 个答案:

答案 0 :(得分:1)

你究竟是如何调用shell脚本的? sed使用$ 1和$ 2的值,看起来可能是问题发生的地方。

根据原始海报的评论,似乎最终目标是将原始文件的位置存储在〜/ my-documents / mydir01 / locations中,然后在文件需要时从那里检索它。恢复。

执行此操作的一种方法是使用元组(例如键值对)来存储和检索此信息。例如,如果原始文件名是X并且新文件名是Y,则在更改时,您将向位置文件添加“X Y”。稍后,当您想要恢复文件时,您可以使用X(或者可能是Y)从位置文件中选择此行(提示:使用grep),然后使用awk或perl(例如:awk'{print $ 1} ')选择该行的第一部分。这样做会给你X,这就是你想要的,因为X是文件的原始名称。

总之,这个问题实际上并不是关于sed的。

祝你好运。