2013-10-29 109 views
4

在bash腳本文件,我已成立一個變量是這樣的:在bash如何替換字符串變量,並將其設置爲sed命令

current_path=`pwd` 
    sed -i "1s/.*/working_path='$current_path';/" file1.sh 

我要運行該腳本,以取代第一線file1.sh分成working_path='$current_path';,但current_path/,在sed命令中,/是在sed中預定義的替換模式。 我已經試過這樣:

current_path1="${current_path/\//\\\/}" 

上面的線,我想更換/變量current_path\/,然後輸入current_path1sed命令,但也有錯誤。

您能給我一些建議嗎?謝謝。

+0

可能重複(http://stackoverflow.com/questions/584894/sed-scripting-environment-variable-substitution) – tripleee

+0

@tripleee,謝謝。這篇文章非常有幫助。當時我可能找不到那個帖子,我面臨這個問題。或者我使用了不同的關鍵字,以便搜索引擎不返回該帖子的索引。於是,我在這裏發了一個新帖子。 – mining

回答

7

試試這個。

sed -i -e "[email protected]*@working_path='$current_path';@" file1.sh 

使用@,而不是/在替換命令。

+0

謝謝,它的工作原理。 – mining

2

您可以使用不同的分隔符爲s///命令:

current_path=`pwd` 
sed -i "1s|.*|working_path='$current_path';|" file1.sh 

但你沒有真正搜索和替換這裏,,你要插入新行,刪除舊行:

current_path=`pwd` 
sed -i -e "1i\working_path='$current_path)';" -e 1d file1.sh 

你真的改變.sh文件的第一行嗎?你是否刪除了她的爆炸線?

+0

是的,先生,當我在終端運行這個'sed -i「1s /.*/ working_path ='\/home \/user \/Desktop'; /」file1.sh'時,它工作,但它會替換'#/ bin/bash'到'working_path ='/ home/user/Desktop;' – mining

+0

我的搜索和替換失敗了,有什麼想法爲什麼? 'sed -i「s | \''$ foo」| \''$ bar「/ g」「$ file」'。 錯誤是:'命令替換:第28行:語法錯誤:意外的文件結束; sed:-e表達式#1,字符22:未終止的's'命令' – Dennis

+0

是那些反引號應該在那裏? –

0

請在模式字符串的開頭添加'/'。它用字符串替換模式的所有匹配。 [sed的腳本 - 環境變量替換]的

current_path1="${current_path//\//\\\/}" 
+0

謝謝,先生,拉法的答案,第一個答案,起作用。 – mining