あしたは晴れるかな。ii

駅前SEのお勉強ブログです。備忘録を兼ねて徒然事をアップしていきます。

sed コマンド

sed コマンドはさまざまな機能を持ったコマンドだが、主には文字列の置換処理に利用されるコマンドです。

まるで知らなかったのでメモメモ。

http://shellscript.sunone.me/filter_sed.html

あたりを参考にさせていただきました。

 

きっかけは。iptables の設定に利用させていただいた(パクらせていただいた)次のコマンドの意味がまるで分からなかった事から。

LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d

サブネットマスクを文字列 LOCALNET_MASK に代入するという式です。

$LAN = eth0 など IF 名が入ります。

ifconfig コマンドで取得した情報の中からサブネットマスクを切り出します。

普通に ifconfig コマンドを打つと次のような表示が得られる。

 

eth0      Link encap:Ethernet  HWaddr BC:5F:F4:1D:79:EC 
          inet addr:192.168.11.254  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::be5f:f4ff:fe1d:79ec/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:55811 errors:0 dropped:0 overruns:0 frame:0
          TX packets:41545 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:43020197 (41.0 MiB)  TX bytes:6581828 (6.2 MiB)

この文字列をパイプで sed コマンドで渡す。

sed s/ [切り出しルール] / [置換後文字列] /p

の書式。()の中のルールにマッチした最初の文字列が \1 となる。

つまり、Mask:~ を含む列が 255.255.255.0 のみに置換される。

最後の -e d で余計な文字列を削除してくれる。

 

ややこしいですね。

シェルスクリプトで簡単に文字列整形をする必要があるとき便利やもね。