我的课程包括编写一个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
答案 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的。
祝你好运。