2016-04-11 13 views
1

私はteamcityのためのbashスクリプトを持っています。プレースホルダを使ってビルド変数の値をファイルに置きます。英数字以外の記号のbash自動エスケープ

sed -i "" 
-e "s/BUNDLE_VERSION/%bundle_version%/" 
-e "s/BUNDLE_ID/%bundle_id%/" 
-e "s/APP_TITLE/%title%/" "%system.teamcity.build.tempDir%/info.plist" 

%var% - チームシップごとにbashスクリプトを実行する前にvarの値に置き換えられました。

',",/などの他の英数字以外の記号を持つ変数では機能しません。 1:: "" S/APP_TITLE /オート... ":無効なコマンドコード"

スクリプトを修正するためにどのようにそれが

[12時22分07秒] sedのクラッシュtitle = Auto Shop "SuperCar"で例えば 英数字以外の記号を使用するには?

BUNDLE_VERSION=$(echo "$BUNDLE_VERSION" | sed -r 's/\\/\\\\/g;s/\//\\\//g;s/\^/\\^/g;s/\[/\\[/g;s/'\''/'\'"\\\\"\'\''/g;s/\]/\\]/g;s/\*/\\*/g;s/\$/\\$/g;s/\./\\./g') 

例:

+1

sedは使用しないでください。 awkやperlを使って変数を渡してください。 – 123

答えて

1

sedに渡す前に、このような特殊/メタ文字をエスケープ

$ echo "^[a/b'c\d]*$." | sed -r 's/\\/\\\\/g;s/\//\\\//g;s/\^/\\^/g;s/\[/\\[/g;s/'\''/'\'"\\\\"\'\''/g;s/\]/\\]/g;s/\*/\\*/g;s/\$/\\$/g;s/\./\\./g' 
\^\[a\/b'\''c\\d\]\*\$\. 

をメイン発現のための変数に入れながら、単一引用符を使用します。 awk-vオプションなどの変数を渡すための他のツールを使用する方が良いです。

関連する問題