Linuxでシェルスクリプトを作っていて、変数に格納された値でURLをsedで置換したい場合があります。sedだと,sコマンドが置換なので以下のような感じで指定することが多いです。
#!/bin/bash
BASE_URL=http://www.example.com/
sed -e "s/url/$BASE_URL/g"
ですが、上記のスクリプトは正しく動作せず、以下のようなエラーが出力されます。
$ convert.sh
sed: -e expression #1, char 13: unknown option to `s'
URLの中に"/"が含まれているため,sedの検索パターンの区切り文字と衝突してしまうためです。
sedの検索パターンの区切り文字は、通常"/"を使う事が多いですが、別の文字に変更することもできます。ですので、以下のように区切り文字を変えてしまうとわかりやすいです。
#!/bin/bash
BASE_URL=http://www.example.com/
echo "my site is URL" | sed -e "s@URL@$BASE_URL@g"
これを実行すると以下のように正しく置換できます。
$ convert.sh
my site is http://www.example.com/
もし、変数の中で"@"も使っている場合は、以下のようにURLに含まれないことが保証されている記号を使うこともできます。
sed -e "s>url>$BASE_URL>g" a.txt
こちらもおススメ