[Linux]sedでURLを置換する方法(スラッシュを含む文字列置換を簡単に行う)

カテゴリ: Linux

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
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。