2012-11-28 49 views
0

我的課程作業涉及到編寫一個Linux腳本來從僞垃圾文件夾'還原'文件。我已經做到了這一點,它看起來像應該工作,但它不。相反,我得到一個錯誤,指出:在linux中使用'sed'時出現額外的字符錯誤

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

可能是錯誤的,但我認爲你可能必須將你的名字='direname'$ restore「'放入2個空格以保持if/fi – JoshDM

+0

使用你在一個答案的評論中給出的示例命令, 「sed」被稱爲「sed」NewFile02「〜/ my-documents/mydir01/locations」,無論「if」是否爲真。其中'N'是一個有效的命令,它不需要參數,下面的'e'將'sed'混淆了。這是錯誤來自的地方。基於此,我認爲你並不真正理解「sed」是什麼,或者你不會給出這樣的論點。 – livibetter

回答

1

到底是如何在調用你的shell腳本? $ 1和$ 2的值由sed使用,看起來可能是問題出現的地方。

根據原始海報的評論,看起來希望的最終目標是將原始文件的位置存儲在〜/ my-documents/mydir01/locations中,稍後在文件需要時從其中檢索它被恢復。

做到這一點的一種方法是使用元組(例如鍵值對)來存儲和檢索這些信息。例如,如果原始文件名是X並且新文件名是Y,那麼在更改時,您應該將「X Y」添加到位置文件。後來,當你想恢復文件時,你可以使用X(或者Y)從位置文件(提示:使用grep)中選擇這一行,然後使用awk或perl(例如:awk'{print $ 1} ')挑選線的第一部分。這樣做會給你X,這是你想要的,因爲X是文件的原始名稱。

總之,這個問題實際上並不是關於sed。

祝你好運。

+1

我只是用'恢復[文件名]'來調用它 – user1860676

+0

你能分享你使用它的確切命令,包括引起問題的文件名的特定值嗎? [與python不同,shell腳本中的空格並不重要。]另一個問題。一個使用sed來執行模式編輯。你究竟用完成了什麼? –

+0

我測試的命令是: '恢復NewFile02' sed行應該從'位置'(文本文件)檢索文件的以前的文件路徑和名稱我嘗試使用grep來代替,但我無法讓它工作無論是。 – user1860676

相關問題