深入淺出linux三劍客之awk必殺技一例

2021-09-05 06:45:09 字數 3137 閱讀 3221

緣起:上完第三節培訓課後,同學們群內討論氛圍相當的好,那麼就再給大家一點驚喜,希望大家繼續加油努力,達到你們的第一階段薪水目標。

老男孩linux培訓第三節課程課前第考試三題,問題如下:

3.

請執行命令取出

linux

eth0

ip位址

(請用

cut,有能力者也可分別用

awk,sed

命令答

)

解答:

15種,還可以有很多,在這裡給大家著重講下

awk的技巧用法,希望大家能多重視老師的思路、思維過程,不過過分關注問題的答案,以便達到學一通十的效果。

方法一【此法為綠葉】:如果用

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

小結:這個方法很方便吧,同學們可以多用,選取包含

ip位址行的特殊關鍵字

'inet addr

』過濾然後,使用

awk以空格和

:同時做分隔符,然後取出需要的內容。

本答案的最大缺點就是計算

$n的時候很費勁,因為

inet

前面有多個空格,查到

$13,真是不容易,如此看來從實現時間上可能還不如第乙個方法快呢?那好引出我們今天的關鍵答案案例。

方法三【大紅花出場】:通過

awk同時使用多個分隔符,然後通過正則匹配多個分隔符的方法來實現:

[root@oldboy ~]# ifconfig eth0 |awk -f '[ :]+' 'nr==2 '

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 '[-:]+' ''      1

[root@oldboy ~]# echo ---1:----2|awk -f '[-:]+' ''      2

[root@oldboy ~]# echo ---1:::::2|awk -f '[-:]+' ''     2

最後把我的這些年的運維感悟送給大家:

老男孩語錄⑧⑧

-把簡單的技術學到極致就是高手

工作中多用簡單的技術,實現較複雜的架構,這樣不但能減少維護成本,還減少出故障問題的機率,

同時降低修復故障所花費的時間,更避免流失處理的人無人接替維護的尷尬局面發生。

運維工作中:簡單、易用,是使用命令,選擇軟體和解決方案的基本原則,不是越複雜越好。

深入淺出linux三劍客之awk必殺技一例

緣起 上完第三節培訓課後,同學們群內討論氛圍相當的好,那麼就再給大家一點驚喜,希望大家繼續加油努力,達到你們的第一階段薪水目標。老男孩linux培訓第三節課程課前第考試三題,問題如下 3.請執行命令取出linux中eth0的ip位址 請用cut,有能力者也可分別用awk,sed命令答 解答 方法一 ...

深入淺出linux三劍客之awk必殺技一例

緣起 上完第三節培訓課後,同學們群內討論氛圍相當的好,那麼就再給大家一點驚喜,希望大家繼續加油努力,達到你們的第一階段薪水目標。老男孩linux培訓第三節課程課前第考試三題,問題如下 3.請執行命令取出linux中eth0的ip位址 請用cut,有能力者也可分別用awk,sed命令答 解答 方法一 ...

深入淺出LINUX三劍客之AWK必殺技一例

方法一 此法為綠葉 如果用awk來處理的話,一般的同學可能會用下面的辦法實現 root oldboy ifconfig eth0 grep inet addr awk f awk 10.0.0.162 小結 這個方法是常規方法,很好。但是我們有沒有更簡單的awk實現方法呢?往下看。方法二 此法為小紅...