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 で余計な文字列を削除してくれる。
ややこしいですね。
シェルスクリプトで簡単に文字列整形をする必要があるとき便利やもね。