[シェルスクリプト] 空白を詰めてイコールの次の値を取得する方法

2 min read

イコールの後にスペースを入れたり入れなかったりする輩がいて、単純にイコール後の値を取得できない場合も想定できるかと思います。
(それはそれで別の問題が発生しそうですが)

そういう場合を想定して、予め空白を詰めて、イコールの次の値を取得します。

始めに

Sambaの設定ファイルsmb.conf(/etc/samba/smb.conf)を例に解説したいと思います。

smb.confを覗くとこんな感じで設定値が書き込まれています。

workgroup = WORKGROUP
server string = Suzume ga Samba
netbios name = TEST

ここではworkgroupの値を取得します。

通常通り取得する

以下のコマンドは、awkでスペース区切りの3番目の文字を取得します。
grep "workgroup " /etc/samba/smb.conf | awk '{print $3}'

この場合、スペースの数によって値がズレてしまいます。
単純にイコールの次の値を取得すれば取得ミスは起こらないと思います。

イコールの次の値を取得する

sedでスペースを潰して、awkの区切り文字を=に変えて2番目の文字を取得しています。
grep "workgroup " /etc/samba/smb.conf | sed "s/ //g" | awk -F'=' '{print $2}'

これで憂慮せずWORKGROUPが取得できるかと思います。