2017-07-28 21 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

BTW、[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句/行)'; newdescription = "\\\" $ volledigenaam \\\ ""; sed -e "/ $ olddescription/$ newdescription/g"

関連する問題