2012-11-28 2 views
0

내 교과 과정에는 가짜 휴지통 폴더에서 파일을 '복원'하기위한 리눅스 스크립트 작성이 포함됩니다. 나는 이것을했고, 마치 일을해야한다고 생각하지만 그렇지 않습니다.리눅스에서 'sed'를 사용할 때 여분의 문자 오류

나오지 : -e 표현 # 1, 문자 2 : 대신에, 나는 말한다 오류 get 명령 후 추가 문자가

하지만 난 볼 수 없습니다 왜, 내가 사용하지 않기 때문에 내 코드 어디서나 -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

틀릴 수도 있겠지만 ifname /'012name "$ restore"를 if/fi 안에두기 위해서 $ restore "를 옮겨야 할 것 같아요 – JoshDM

+0

한 대답의 코멘트에 당신이 준 예제 명령을 사용하면, 'sed'는'sed 'NewFile02 "~/my-documents/mydir01/locations'로'if'가 true인지 아닌지 여부로 불립니다. 'N '이 유효한 명령이고 인수를 취하지 않는 경우,'e'는'sed'를 혼동합니다. 그것이 오류의 출처입니다. 그것을 바탕으로, 나는 당신이 정말로'sed'가 무엇인지 이해하지 못하거나, 그런 주장을하지 않을 것이라고 생각합니다. – livibetter

답변

1

당신이 당신의 쉘 스크립트를 호출 할 정확히 어떻게? $ 1과 $ 2의 값은 sed에 의해 사용되며 문제가 발생하는 곳인 것처럼 보입니다.

원래 포스터의 의견을 바탕으로 원하는 최종 목표는 ~/my-documents/mydir01/locations에 원본 파일의 위치를 ​​저장하고 나중에 파일이 필요할 때 해당 위치에서 검색하는 것입니다 복원 할 수 있습니다.

이 작업을 수행하는 한 가지 방법은 튜플 (예 : 키 - 값 쌍)을 사용하여이 정보를 저장하고 검색하는 것입니다. 예를 들어 원래 파일 이름이 X이고 새 파일 이름이 Y 인 경우 변경시 "X Y"를 위치 파일에 추가합니다. 나중에 파일을 복원하려면 X (또는 Y)를 사용하여 위치 파일에서이 행을 선택하고 (힌트 : grep 사용) awk 또는 perl을 사용합니다 (예 : awk '{print $ 1} ')를 사용하여 선의 첫 번째 부분을 선택합니다. 이렇게하면 X가 파일의 원래 이름이기 때문에 원하는 것을 X라고 할 수 있습니다.

요약하면이 질문은 실제로 sed에 관한 것이 아닙니다.

행운을 빈다.

+1

방금 ​​'restore [filename]'을 사용하여 호출합니다. – user1860676

+0

문제의 원인이되는 파일 이름에 대한 특정 값을 포함하여 사용중인 정확한 명령을 공유 할 수 있습니까? [파이썬과는 달리, 쉘 스크립트에서 간격은 중요하지 않습니다.] 또 하나의 질문입니다. 하나는 sed를 사용하여 패턴 편집을 수행합니다. 로 정확히 무엇을 수행하고 있습니까? –

+0

내가 테스트했던 명령은 : 'restore NewFile02' sed 라인은 'location'(텍스트 파일)에서 파일의 이전 파일 경로와 이름을 검색하도록되어 있습니다. 대신 grep을 사용해 보았습니다. 그러나 작동시키지 못했습니다. 어느 한 쪽. – user1860676

관련 문제