Bash
とSED
jsファイルの2つの文字列をURLに置き換えようとしています。sedコマンドでスラッシュをエスケープする
挿入する必要がある2つのURLは、.shスクリプトを実行するときに入力パラメータです。私はすべての楽しみをエスケープする必要がしかし、私のsedコマンドでこれを使用可能にする
./deploy.sh https://hostname.com/a/index.html https://hostname2.com/test
はとスラッシュ:\\
?彼らは
APP_URL=$1
API_URL=$2
sed "s/tempAppUrl/$APP_URL/g;s/tempApiUrl/$API_URL/g" index.src.js > index.js
今マックOSXシエラに、このsedコマンドの作品をエスケープしている場合
./deploy.sh https:\\/\\/hostname.com\\/a\\/index.html https:\\/\\/hostname2.com\\/test
私はそれが自己スラッシュをエスケープするスクリプトをしたい、のparamsのようにエスケープURLを挿入する必要はありません。
これは私が試したものです:
APP_URL=$1
API_URL=$2
ESC_APP_URL=(${APP_URL//\//'\\/'})
ESC_API_URL=(${API_URL//\//'\\/'})
echo 'Escaped URLS'
echo $ESC_APP_URL
#Echos result: https:\\/\\/hostname.com\\/a\\/index.html
echo $ESC_API_URL
#Echos result: https:\\/\\/hostname2.com\\/test
echo "Inserting app-URL and api-URL before dist"
sed "s/tempAppUrl/$ESC_APP_URL/g;s/tempApiUrl/$ESC_API_URL/g" index.src.js > index.js
のparamsが同じに見えますが、この場合にはSEDがエラー
sed: 1: "s/tempAppUrl/https:\\/\ ...": bad flag in substitute command: '\'
をスロー誰もがここで私の違いを教えてもらえますか?文字列は同じように見えますが、結果は異なります。
これは '/' sだけではなく、あなたがエスケープしなければならない文字がたくさんあります(例えば現在のregexpの '.'s)。しかしsedは大部分のエラーメッセージを表示しません。ちょうどあなたの出力を壊すでしょう。 http://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliably-with-sed/29626460#29626460を参照してください。堅牢な文字列置換を行う方法を学びたい場合は、新しい質問を投稿してください(そして、sedは文字列をサポートしていないため、答えはsedされません)。 –