シェルスクリプトを作成していると、変数の値を置換して出力したいと思うときがあるだろう。
では、どのような方法があるのだろうか?
1.sedコマンドを用いる
どの環境でも利用できる事を考えると、bashやkshに依存しない「/bin/sh」で利用出来る方法となる。
「/bin/sh」で利用出来る方法となると、sedコマンドを用いた方法が一般的だろう。
以下の例では、変数「TEST」の中身を「test1234」から「test5678」に置換している。
#!/bin/sh
TEST="test1234
test1234"
TEST=`echo "$TEST" | sed s/1234/5678/g`
echo "$TEST"
改行も出力され、問題なく置換ができている。
sedコマンドの動作については、こちらを参照してもらいたい。
2.変数の展開時に置換を行う(bash/ksh等)
※ この方法は「/bin/sh
」では利用出来ないので注意。
bashやkshを使える環境であれば、変数の展開時に置換を行う事もできる。
例えば、変数「TEST」に入っている値「abcdef abcdef 1234 1234」の内容で、「abc」を「XYZ」に置換するとしよう。
この場合は、以下のように変数を展開すれば良い。
echo ${変数名/置換前文字列/置換後文字列}
上記内容でコマンドを実行する。
$ TEST="abcdef abcdef 1234 1234"
$
$ echo $TEST
abcdef abcdef 1234 1234
$
$ echo ${TEST/abc/XYZ}
XYZdef abcdef 1234 1234
$
なお、上記の例だと最初にマッチした値しか置換しない。
マッチした文字列を全て置換する場合は、以下のようにする。
echo ${変数名//置換前文字列/置換後文字列}
上記例で実行した結果がこちら。
$ TEST="abcdef abcdef 1234 1234"
$
$ echo $TEST
abcdef abcdef 1234 1234
$
$ echo ${TEST//abc/XYZ}
XYZdef XYZdef 1234 1234
$
bashやkshであれば、このような形での置換も可能だ。