bash/sed中的转义括号

bash/sed中的转义括号,bash,sed,Bash,Sed,我在使用bash和sed对字符串中的括号进行转义时遇到了一些问题 以下是我正在做的: #!/bin/bash olddescription='(1 phrase/line)' newdescription="\"$volledigenaam\"" (cd /home/hew/git/odoo/addons/$technischenaam ; sed -i s/$olddescription/$newdescription/g __openerp__.py) 我读过,如果我使用单引号,我不需要

我在使用bash和sed对字符串中的括号进行转义时遇到了一些问题

以下是我正在做的:

#!/bin/bash 
olddescription='(1 phrase/line)'
newdescription="\"$volledigenaam\""
(cd /home/hew/git/odoo/addons/$technischenaam ; sed -i s/$olddescription/$newdescription/g __openerp__.py)
我读过,如果我使用单引号,我不需要转义括号。 我也试着用反斜杠跳过括号,但也没用

这就是错误:

sed:-e表达式#1,字符4:未终止的's'命令


有什么办法解决这个问题吗?

olddescription
的值中划掉斜杠:

olddescription='(1个短语\/line)'

然后,您可以尝试以下方法:

sed-i“s/$oldscription/$newdescription/g”\uuu openerp\uuuuuu.py

单引号不是变量值的一部分,因此在sed命令中无效。试着在开头添加一个“set-x”,你会看到事情是如何扩展的。顺便说一句,这正是你要做的。请参阅其中定义的
gsub\u literal
。请注意
olddescription
中有一个
/
。添加语法引号虽然必要,但不足以防止
sed
在该场景中被混淆。感谢您在@CharlesDuffy纠正我的错误。我更改了答案以解决实际问题。测试修改后的答案:
olddescription='(1个短语/行);newdescription=“\\\”$volledigenaam\\\”;sed-e“s/$oldscription/$newdescription/g”再次感谢!修复并重新测试。我错过了
旧描述
中的斜杠。很抱歉,引号前的反斜杠是不是真的需要?也就是说,如果我们只跳过了
olddescription
中的一个,并且没有进行其他更改,那么OP的问题也不会得到解决吗?(如果
$volledigenaam
的值包含
/
,这也没有帮助;因为OP没有指定它,理想的答案将涵盖所有可能的值)。