0

我的课程涉及编写一个 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
4

1 回答 1

1

你究竟是如何调用你的shell脚本的?sed 使用了 $1 和 $2 的值,看起来这可能就是问题所在。

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

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

总而言之,这个问题根本不是关于 sed 的。

祝你好运。

于 2012-11-28T17:30:23.843 回答