歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 從命令行取linux中eth0的IP地址學習awk

從命令行取linux中eth0的IP地址學習awk

日期:2017/3/1 15:43:08   编辑:關於Linux
從命令行取linux中eth0的IP地址學習awk 請執行命令取出linux中eth0的IP地址(請用cut,有能力者也可分別用awk,sed命令答)。 解答: 說明:此題解答方法已經給大家講解了不下15種,還可以有很多,在這裡給大家著重講下awk的技巧用法,希望大家能多重視老師的思路、思維過程,不過過分關注問題的答案,以便達到學一通十的效果。 方法一【此法為綠葉】:如果用awk來處理的話,一般的同學可能會用下面的辦法實現: [root@oldboy ~]# ifconfig eth0|grep 'inet addr'|awk -F ":" '{print $2}'|awk '{print $1}' 10.0.0.162 小結:這個方法是常規方法,很好。但是我們有沒有更簡單的awk實現方法呢?往下看。 方法二【此法為小紅花】:通過awk同時使用多個分隔符來實現: [root@oldboy ~]# ifconfig eth0|grep 'inet addr'|awk -F '[ :]' '{print $13}' 192.168.1.186 提示:本題通過使用空格或冒號來做分隔符,然後一次性取出結果,就是空格或冒號可以看做是同一個分隔符。 小結:這個方法很方便吧,同學們可以多用,選取包含IP地址行的特殊關鍵字'inet addr’過濾然後,使用awk以空格和:同時做分隔符,然後取出需要的內容。 本答案的最大缺點就是計算$n的時候很費勁,因為inet前面有多個空格,查到$13,真是不容易,如此看來從實現時間上可能還不如第一個方法快呢?那好引出我們今天的關鍵答案案例。 方法三【大紅花出場】:通過awk同時使用多個分隔符,然後通過正則匹配多個分隔符的方法來實現: [root@oldboy ~]# ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}' 10.0.0.185 我們來說明下這個簡單易用的好辦法: 提示:本題NR是行號,分隔符+號匹配,[]裡一個或多個任意一個分隔符,這裡就是匹配一個或多個冒號或空格。 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 '[-:]+' '{print $2}' 1 [root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $3}' 2 [root@oldboy ~]# echo ---1:::::2|awk -F '[-:]+' '{print $3}' 2
Copyright © Linux教程網 All Rights Reserved