方法一【此法為綠葉】:如果用awk來處理的話,一般的同學可能會用下面的辦法實現:
[root@oldboy ~]# ifconfig eth0|grep 『inet addr』|awk -f 「:」 『』|awk 『』
10.0.0.162
小結:這個方法是常規方法,很好。但是我們有沒有更簡單的awk實現方法呢?往下看。
方法二【此法為小紅花】:通過awk同時使用多個分隔符來實現:
[root@oldboy ~]# ifconfig eth0|grep 『inet addr』|awk -f 『[ :]』 『』
192.168.1.186
本答案的最大缺點就是計算$n的時候很費勁,因為inet前面有多個空格,查到$13,真是不容易,如此看來從實現時間上可能還不如第乙個方法快呢?那好引出我們今天的關鍵答案案例。
方法三【大紅花出場】:通過awk同時使用多個分隔符,然後通過正則匹配多個分隔符的方法來實現:
[root@oldboy ~]# ifconfig eth0 |awk -f 『[ :]+』 『nr==2 』
10.0.0.185
我們來說明下這個簡單易用的好辦法:
1)awk -f 後面跟分隔符『[空格:]+』,其中[空格:]多分隔符寫法,意思是以空格或冒號做分隔,後面的「+」號是正規表示式,意思是匹配前面空格或冒號,兩者之一的1個或1個以上。
2)nr==2和sed -n 「2p」,相當,意思都是選擇第幾行,例:
[root@oldboy ~]# ifconfig eth0|awk nr==2
inet addr:10.0.0.185 bcast:10.0.0.255 mask:255.255.255.0
3)指定awk -f 『[ :]+』分隔符後,不同字串被分隔的列依次為:
inet
addr
10.0.0.185
bcast:10.0.0.255 mask:255.255.255.0
第一列第二列
第三列第四列
後面忽略不計。
4)整個答案awk部分意思是,通過nr==2取出第二行,然後,通過-f 『[-:]+多分隔符正則匹配,然後通過{print $4}列印出第四列 !謝謝楊瑞同學的答案啊, 懶得寫了,所以讓你總結下。嘿嘿,看到後別怪老師啊。
5)掌握了理論要去實踐驗證才是科學嚴謹的學習態度,好,來幾個例子實踐說話吧。
[root@oldboy ~]# echo —1:—-2|awk -f 『[-:]+』 『』
[root@oldboy ~]# echo —1:—-2|awk -f 『[-:]+』 『』
[root@oldboy ~]# echo —1:::::2|awk -f 『[-:]+』 『』
深入淺出linux三劍客之awk必殺技一例
緣起 上完第三節培訓課後,同學們群內討論氛圍相當的好,那麼就再給大家一點驚喜,希望大家繼續加油努力,達到你們的第一階段薪水目標。老男孩linux培訓第三節課程課前第考試三題,問題如下 3.請執行命令取出linux中eth0的ip位址 請用cut,有能力者也可分別用awk,sed命令答 解答 方法一 ...
深入淺出linux三劍客之awk必殺技一例
緣起 上完第三節培訓課後,同學們群內討論氛圍相當的好,那麼就再給大家一點驚喜,希望大家繼續加油努力,達到你們的第一階段薪水目標。老男孩linux培訓第三節課程課前第考試三題,問題如下 3.請執行命令取出 linux 中 eth0 的 ip位址 請用 cut,有能力者也可分別用 awk,sed 命令答...
深入淺出linux三劍客之awk必殺技一例
緣起 上完第三節培訓課後,同學們群內討論氛圍相當的好,那麼就再給大家一點驚喜,希望大家繼續加油努力,達到你們的第一階段薪水目標。老男孩linux培訓第三節課程課前第考試三題,問題如下 3.請執行命令取出linux中eth0的ip位址 請用cut,有能力者也可分別用awk,sed命令答 解答 方法一 ...