0

我有一个变量

qsubFile="submitJob.sh"

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

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

我尝试使用

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

qsubFile=""

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

但它取代了它

4

2 回答 2

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
于 2012-12-19T20:00:39.270 回答
1

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

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

或者如果你想确保你得到整条线

sed -i 's/^\(qsubFile=\).*$/\1"'"$qsubfile"'"/g' write.sh
于 2012-12-19T20:48:57.697 回答