よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

sedコマンドで正規表現を利用する際に忘れてはならないこと

sedコマンドを利用して、文字列置換を行うことができるのは皆さんご存知のとおりです。

私もよく以下のようなコマンドを実行し、filename.txtの中の文字列である (replacement) を hostname に置き換えています。

$ sed -i s/(replacement)/hostname/g filename.txt

これでほとんどの場合は解決するのですが、正規表現を使用する時は注意が必要です。


どのようなことに注意しなければならないかというと、

「 s/置換対象文字列/置換文字列/g 」のかたまりを「 's/対象文字列/置換文字列/g'

という風にシングルクォート(')もしくはダブルクォート(")で囲む必要がある点です。

私は、これに気づかずに数十分悩むこととなりました。。。

ちなみにシングルクォートとダブルクォートの使い分けは、クォート内部でシェル変数などを利用する's/対象文字列/置換文字列/g'かどうかで、シェル変数を使う場合にダブルクォートを利用しましょう。

正常に実行できるかどうかはわかりせんが、以下のような感じ。

$ sed -i "s/${HOSTNAME})/ubuntu/g" filename.txt

sed正規表現を利用する際にはクォートをお忘れないように!