先日、sedによる置換にコマンドの実行結果を利用する必要が出たのでその方法について備忘。
sedの処理内でコマンドを実行させる場合は、処理を「'(シングルクォーテーション)」で囲わず、「"(ダブルクォーテーション)」か特に囲まないで、コマンドの実行箇所だけを「`(バッククォート)」で囲んで記述する。
$ cat test.hostname
hostname
HOSTNAME
TESTNAME
$
$ # シングルォーテーションだと、置換されない
$ sed -e 's/hostname/`hostname`/g' ./test.hostname
`hostname`
HOSTNAME
TESTNAME
$
$ # ダブルクォーテーションだと、置換される
$ sed -e "s/hostname/`hostname`/g" ./test.hostname
test-centos
HOSTNAME
TESTNAME
$
$ # 処理を囲まなくても置換される
$ sed -e s/hostname/`hostname`/g ./test.hostname
test-centos
HOSTNAME
TESTNAME
$
sedで置換をする際、シングルクォーテーションで囲む例がよくあるけど、それではコマンドが実行されないので注意が必要なようだ。