bash/sed中的转义括号
我在使用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) 我读过,如果我使用单引号,我不需要
#!/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没有指定它,理想的答案将涵盖所有可能的值)。