2017-07-28 46 views
0

我在使用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) 

我读过,如果我使用单引号,我不需要对括号进行转义。 我也试着用反斜杠转义括号,但也没有工作。

这是错误:

sed: -e expression #1, char 4: unterminated `s' command

如何解决这个任何想法?

+0

单引号不变量值的一部分,因此必须在没有影响sed命令。尝试在开头添加一个“set -x”,你应该看到事物是如何扩展的。 –

+0

顺便说一句,[BashFAQ#21](http://mywiki.wooledge.org/BashFAQ/021)是你在这里尝试做的事情。请参阅其中定义的'gsub_literal'。 –

回答

1

薹斜杠在olddescription值:

olddescription='(1 phrase\/line)';

然后,你可以试试这个: sed -i "s/$olddescription/$newdescription/g" __openerp__.py

+0

请注意'olddescription'中有一个'/'。必要时添加语法引号并不足以防止sed在该场景中混淆。 –

+0

感谢您纠正我@CharlesDuffy。我改变了我的答案来解决真正的问题。 –

+0

测试你的修改答案:'olddescription ='(1 phrase/line)'; newdescription = “\\\” $ volledigenaam \\\ “”; sed -e“s/$ olddescription/$ newdescription/g”