2012-12-19 17 views
0

sed的正確語法,我有一個變量找不出使用雙引號

qsubFile="submitJob.sh"

echo $qsubFile返回submitJob.sh沒有雙引號。

現在,我想找到包含字符串qsubFile="someOtherFile.sh"行和文件"write.sh"替換其中以qsubFile="submitJob.sh"

我嘗試使用

sed -i '/qsubFile=/c\qsubFile="'"$qsubFile"'"' write.sh

qsubFile=""

我似乎無法得到這個正確的語法。

但它取代它作爲

回答

2

你只需要單引號sed要做到這一點,沒有用單引號內的雙引號沒有問題:

sed -i 's/qsubFile="someOtherFile.sh"/qsubFile="submitJob.sh"/g' write.sh 

如果"someOtherFile.sh"是不是一個在write.sh不是使用後續固定字符串全部更換:

$ sed -i 's/qsubFile="[^"]*"/qsubFile="submitJob.sh"/g' write.sh 

正則表達式"[^"]*"

"  # double quote 
[^"]* # Anything not a double quote 
"  # double quote 

看來我誤解的問題在第一時間正確的引用是使用可變$qsubFile是,你錯過了最後/

sed -i 's/qsubFile="[^"]*"/qsubFile="'"$qsubFile"'"/g' write.sh 
+0

還可以包括由封閉在單引號整件事雙引號:'MYVAR ='VAR =「一個字符串空格「......」或者轉義引號myvar =「var = \」一個字符串\「」' – technosaurus

+0

sudo_O的最後一行完成了這項工作。謝謝! – namu

1

你在正確的軌道上有些是,如果你需要儘管使用shell變量。

sed -i 's/qsubFile="someOtherFile.sh"/qsubFile="'"$qsubfile"'"/g' write.sh 

,或者如果你想確保你得到整個線

sed -i 's/^\(qsubFile=\).*$/\1"'"$qsubfile"'"/g' write.sh