2012-11-14 58 views
2

我想創建一個腳本,替換子字符串以絕對路徑,所以我用

sed s/TEMPDIR/$PWD/ file.py > newfile.py 

所以很明顯,我想絕對取代TEMP路徑,但我不斷收到

的sed:-e表達式#1,焦炭12:未知的選項爲'S'

我想可能是因爲路徑中包含 '/',但我不知道如何解決它。有任何想法嗎?

此外,如果我不處理鏈接,deos PWD保證絕對路徑?

謝謝!

回答

8

使用不同的分隔符:

sed "[email protected]@[email protected]" file.py > newfile.py 

使用PWD可能並不能保證絕對路徑。 (取決於外殼)。但pwd將返回一個絕對路徑,所以使用:

sed "[email protected]@$(pwd)@" file.py > newfile.py 

注意,它們都將工作,如果你的路徑包含@。選擇一個不在任何一箇中出現的分隔符。請注意以下shell標準:

如果PWD設置爲pwd -P將輸出的路徑名,如果當前工作目錄或該目錄的任何父目錄上的權限不足,以確定該路徑名是什麼,PWD的值是未指定的。對這個變量的賦值可能會被忽略。如果應用程序設置或取消設置PWD的值,則不指定cd和pwd實用程序的行爲。

所以你可以依靠$ PWD。請注意,pwd$PWD都不能解析符號鏈接,因此您可能更願意使用readlink -f .

+0

非常感謝!另外,如果舊文件與新文件相同,我會得到一個空白文件。任何想法爲什麼?再次,謝謝 – Yotam

+1

在shell cmd文件中,無論cmd是什麼,總是會導致文件爲空。在它試圖解析'cmd'之前,shell會截斷'file'。 –