シェルで区切り文字を変更する方法をご紹介します。
環境変数である「IFS」を使用します。
ここでは、/etc/hostsを1行ごとに表示したい場合は考えます。
まずは/etc/hostsを確認します。
1 2 3 4 |
[root@kamatora ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@kamatora ~]# |
以下のようにfor文に渡す場合、デフォルトでは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@kamatora ~]# for i in $(cat /etc/hosts) > do > echo $i > done 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@kamatora ~]# |
行単位ではなく、区切り文字は空白スペースになっていますね。
これを行単位の処理に変更する場合、IFSを変更する必要があります。
まずは現時点の設定を保存しておきます。
1 |
[root@kamatora ~]# old=$IFS |
続いて、以下のように変更します。
これで改行をあらわすことができます。
1 2 3 |
[root@kamatora ~]# <span style="color: #ff0000;">IFS=`</span> > <span style="color: #ff0000;">`</span> [root@kamatora ~]# |
赤文字の箇所が入力した文字です。最初のシングルクォーテーションのあとに改行し、開業直後にもう一度シングルクォーテーションを入力します。
では、再度確認してみましょう。
1 2 3 4 5 6 7 |
[root@kamatora ~]# for i in $(cat /etc/hosts) > do > echo $i > done 127.0.0.1 lawx.jp localhost localhost.localdomain localhost4 localhost4.localdomain4 lawdb01 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@kamatora ~]# |
どうでしょう。
行単位で表示されていることがわかります。
処理が終わった後には、
1 |
IFS=$old |
として、元に戻しておくことをオススメします。(特にシェルでの場合)