話.linux三劍客之利刃出鞘

劍客起源於唐代傳奇的中國武俠小說中,他們所使用的兵器的地位是至高無上的,一直也是兵器中的王者,符合了在中國古代社會的地位。今天給你們詳細的總結一下linux系統下的利刃兵器:awksedgreplinux

三劍客介紹(grep、sed、awk)web

老三:grep

是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來正則表達式

# grep 經常使用選項 
-c #只輸出匹配行的計數 
-i #不區分大小寫 
-h #查詢多文件時不顯示文件名 
-l #查詢多文件時只輸出包含匹配字符的文件名 
-n #顯示匹配行及行號 
-s #不顯示不存在或無匹配文本的錯誤信息 
-v #顯示不包含匹配文本的全部行 
-E #支持擴展的正則表達式 
-P #調用perl語法正則


老二:sed

對文本的處理很強大,增、刪、改、查樣樣能作編程

# sed 經常使用選項 -r #在腳本中使用擴展正則表達式 -n #不打印全部行到標準輸出 -i #直接修改文件

老大:awk(帶頭大哥)

能夠理解爲一門編程語言,能夠自定義變量,有條件語句,有循環,有數組,有正則,有函數數組

# awk 經常使用變量 
$n #當前記錄的第n個字段,字段間由 FS分隔 
$0 #完整的輸入記錄 
FNR #同NR,但相對於當前文件 
FS #字段分隔符(默認是任何空格) 
NF #當前記錄中的字段數 
NR #當前記錄數 
OFS #輸出字段分隔符(默認值是一個空格) 
ORS #輸出記錄分隔符(默認值是一個換行符) 
# awk 經常使用字符串函數 
sub #匹配記錄中最大、最靠左邊的子字符串的正則表達式,並用替換字符串替換這些字符串 
gsub #整個文檔中進行匹配 
index #返回子字符串第一次被匹配的位置 
substr #返回從位置1開始的子字符串,若是指定長度超過實際長度,就返回整個字符串 
split #可按給定的分隔符把字符串分割爲一個數組,默認按當前FS值進行分割 
length #返回記錄的字符數 
toupper #可用於字符串大小間的轉換,該功能只在gawk中有效 
tolower #可用於字符串大小間的轉換,該功能只在gawk中有效 
# awk 經常使用函數 
srand(x) #x是rand()函數的種子 
int(x) #取整 
rand() #產生一個大於等於0而小於1的隨機數

案例使用(有不少種方法,今天咱們這裏只說三劍客的使用方法)編程語言

1.快速取出本機IP?函數

# grep ifconfig eth0|grep -Po '(?<=dr:)\S+' 
# sed  ifconfig eth0|sed -rn 's#.*r:(.*)  B.*#\1#gp' 
# awk  ifconfig eth0|awk -F '[ :]+' 'NR==2{print $4}'

2.原始數據格式替換成新數據格式(grep本身沒法實現該功能了)工具

原始數據:
17/Apr/2015:09:29:24 +0800
17/Apr/2015:09:30:26 +0800
17/Apr/2015:09:31:56 +0800
18/Apr/2015:09:34:12 +0800
18/Apr/2015:09:35:23 +0800
19/Apr/2015:09:23:34 +0800
19/Apr/2015:09:22:21 +0800
20/Apr/2015:09:45:22 +0800
指望結果:
2015-04-17 09:29:24+0800
2015-04-17 09:30:26+0800
2015-04-17 09:31:56+0800
2015-04-18 09:34:12+0800
2015-04-18 09:35:23+0800
2015-04-19 09:23:34+0800
2015-04-19 09:22:21+0800
2015-04-20 09:45:22+0800spa

# sed code

sed -rn 's#Apr#04#g;s#^(.*)/(.*)/(....):(.*) (.*)#\3-\2-\1 \4\5#p;' test.log sed -rn 's#^(.{2})/(.{3})/(.{4}):(.{8}) (.{4})#\3-04-\1 \4\5#p;' test.log

# awk 

awk -F '[/: ]+' '{sub(/Apr/,"04");printf("%s-%s-%s %s:%s:%s%s\n",$3,$2,$1,$4,$5,$6,$7)}' test.log awk '{sub(/Apr/,"04");split($0,array,"[/: ]") ;printf("%s-%s-%s %s:%s:%s%s\n",array[3],array[2],array[1],array[4],array[5],array[6],array[7])}' test.log

相關文章
相關標籤/搜索