2010-06-10 148 views
8

我認爲這可能是一個簡單的問題,但我已到處尋找並嘗試了一些解決方法,但我仍然沒有解決問題。Sed在bash腳本里面不工作

問題描述:我 要替換文件中的字符,我可以很容易使用命令行來完成:

sed -e 's/pattern1/pattern2/g' full_path_to_file/file 

但是當我使用同一條線路bash腳本里面我不能似乎能夠替換它,並且我沒有收到錯誤信息,只是沒有替換的文件內容。

#!/bin/sh 

VAR1="patter1" 
VAR2="patter2" 

VAR3="full_path_to_file" 

sed -e 's/${VAR1}/${VAR2}/g' ${VAR3} 

任何幫助,將不勝感激。

非常感謝您的時間。

+0

sed -e不會更改文件,只是使用substution顯示文件,但文件不會更改,無論是哪種情況 – chmeee 2010-06-10 15:11:39

回答

17

嘗試

sed -e "s/${VAR1}/${VAR2}/g" ${VAR3} 

Bash reference說:

字符 '$' 和 ''' 保留雙引號

因此中仍然具有特殊意義,將能解決你的變量

0

我用腳本li你的......和我的作品一樣好!

#!/bin/sh 

var1='pattern1' 
var2='pattern2' 

sed -i "s&$var1&$var2&g" *.html 

看到的是,雷用「-i」 ......和分隔符字符「&」我用的是你的不同。 分隔符「&」可以用於任何其他不具備PATTERN的字符。

您可以使用:

sed -i "s#$var1#$var2#g" *.html 

sed -i "[email protected][email protected][email protected]" *.html 

...

如果我的模式是: 「[email protected]」 當然,你必須使用一個不同的分隔符,如 「#」, 「%」 ... 好?