我有一个变量
qsubFile="submitJob.sh"
echo $qsubFile
返回submitJob.sh
,不带双引号。
现在,我想找到包含字符串qsubFile="someOtherFile.sh"
的行,并将其替换为文件qsubFile="submitJob.sh"
中的"write.sh"
。
我尝试使用
sed -i '/qsubFile=/c\qsubFile="'"$qsubFile"'"' write.sh
qsubFile=""
我似乎无法为此获得正确的语法。
但它将其替换为
答案 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