无法使用双引号找出sed的正确语法

时间:2012-12-19 19:56:08

标签: bash sed

我有一个变量

qsubFile="submitJob.sh"

echo $qsubFile返回submitJob.sh,不带双引号。

现在,我想找到包含字符串qsubFile="someOtherFile.sh"的行,并将其替换为文件qsubFile="submitJob.sh"中的"write.sh"

我尝试使用

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

qsubFile=""

我似乎无法为此获得正确的语法。

但它将其替换为

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果你需要使用shell变量,那么你在某种程度上是正确的。

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

或者如果你想确保你获得整行

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