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!