2012-12-19 23 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