さあ、プログラミングを学ぼう

プログラミングに関する知識と経験集

sedで置換 アンパサンド(&)とかスラッシュ(/)を含める時の話

sed -{オプション} 's/{置換前}/{置換後}/g'

シェルスクリプトの話です。
ファイルの中だったり、変数の中だったりとある箇所をいじりたい時に使うのがこのsedな訳ですが、
まあ例えば

# ITEM="これはアイテムだぞ"
# echo "$ITEM"
これはアイテムだぞ
# ITEM=`echo "$ITEM" | sed 's/だぞ/ではないぞ/g'`
# echo "$ITEM"
これはアイテムではないぞ

となりますけど、"タッキー"と翼"を"タッキー&翼"に変えたいとしますよね。
まぁ、そんなシチュエーションが巡ってくるかは微妙ですけど。
で、純粋に

# ITEM="タッキーと翼"
# echo "$ITEM"
タッキーと翼
# ITEM=`echo "$ITEM" | sed 's/と/&/g'`
# echo "$ITEM"
タッキーと翼

だけどこれだと上手くいきません。
アンパサンド(&)は置換前の文字列を意味するから、"タッキーと翼"の"と"を"と"に変えるという意味になる。
なので、エスケープしてアンパサンド(&)に意味を持たさないようにします。

# ITEM="タッキーと翼"
# ITEM=`echo "$ITEM" | sed 's/と/\&/g'`
# echo "$ITEM"
タッキー&翼

これで行けた!

スラッシュ(/)も同様でエスケープしないとsedの置換処理そのものに影響を与える。
これも一緒。バックスラッシュ(\)を前につければオッケー。

バックスラッシュの出力方法は自分で調べてくれたまえ。

deha,
yoi programing life wo!