今天主要跟你們介紹2個很是霸道的工具,sed和awk,本篇文章將介紹這兩個工具在平常運維中的經常使用用法,工做中這兩個工具要掌握好了在結合一些管道命令、正則表達式,平常處理事務簡直666啦!正則表達式
l Sedbash
1.強大的地方運維
擅長對數據行進行處理,sed是一種流編輯器,處理時,把當前處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並無改變,除非你使用重定向存儲輸出。利用sed命令能夠將數據行進行替換、刪除、新增、選取等特定工做。編輯器
2.用法工具
sed [-nefr] [動做]ui
選項:spa
-n:使用安靜(silent)模式。在通常 sed 的用法中,全部來自 STDIN 的數據通常都會被列出到終端上。但若是加上 -n 參數後,則只有通過sed 特殊處理的那一行或動做纔會被列出來事務
-e :直接在命令列模式上進行 sed 的動做編輯;
-f :直接將 sed 的動做寫在一個文件內, -f filename 則能夠運行 filename 內的 sed 動做;
-r :sed 的動做支持的是擴展型正規表示法的語法。(默認是基礎正規表示法語法)
-i :直接修改讀取的文件內容,而不是輸出到屏幕ci
動做說明: [n1[,n2]] function
n1, n2 :不見得會存在,通常表明『選擇進行動做的行數』,舉例來講,若是個人動做是須要在 10 到 20 行之間進行的,則『 10,20[動做行爲] 字符串
Function通常有如下參數:
a:新增,後面能夠接字符串,而這些字符串會在新的一行出現(目前的下一行)
c: 替換,後面能夠接字符串,這些字符串能夠替換 n1,n2 之間的行
d:刪除
i:插入,後面能夠接字符串,而這些字符串會在新的一行出現(目前的上一行)
p:打印,將某個選擇的數據打印出來。一般跟參數-n 一塊兒運行
s:替換,用一個字符串替換另外一個,注意與c參數的區別
3.舉例 咱們用/ etc/passwd文件來演示,先來看看sed不加參數跟加上-n參數是怎樣的
看上圖明白選項一欄-n參數後面的解釋意思了吧,不加參數是輸出了文件全部信息而且多打印了第一行的數據,加上-n參數就只打印了第一行的數據,1p就是打印第一行,2p;4,10p就是打印第2行以及第4-10行啦
刪除第1-10行,留意行號變化
刪除第1行,第10行,留意行號變化
將passwd文件中包含/sbin/nologin替換爲/bin/bash並打印輸出
將passwd文件中第2行的數據替換爲test,注意到與s參數的區別了吧
在passwd文件第二行新增test字符串
在passwd文件第二行插入test字符串
刪除passwd文件的第三行至末尾行
l Awk
1.強大的地方
擅長對數據列進行處理,就是把數據逐行的讀入,以空格爲默認分隔符再將每行切斷,對切斷的部分再進行分析處理。
2.用法
awk '條件類型1{動做1} 條件類型2{動做2} ...' filename 選項:
-F fs:字段分隔符,fs是一個字符串或者是一個正則表達式,如-F:
如要對數據作特殊處理,可能還會用到awk的內置變量:
變量名稱 |
表明意義 |
NF |
每一行($0)擁有字段總數 |
NR |
目前awk處理的第幾行 |
FS |
目前分隔符,默認是空格鍵 |
3.舉例
咱們仍是以/etc/passwd 文件爲例。以:爲分隔符,打印passwd 文件中每行用戶名稱user($1)及用戶uid($3)。補充:$0表明一整行數據的意思
打印passwd文件中uid>=500 的用戶名稱及UID
打印passwd每一行的數據,並以:爲分隔符計算每行的字符總數打印在每行數據的末尾
打印passwd文件中以:爲分隔符第三個字段即UID>=500的數據所在行號
想一想平常工做中如何要獲取文件中第幾行第幾列的數據應該如何操做,如打印passwd文件中第一行與最後一行第一列的數據,sed跟awk結合使用啦。
總結:關於sed跟awk平常要用到的用法就說到這裏啦,從事運維的同事必定要熟練運用這兩個工具哦,特別是須要常常作數據彙報的,能減輕很大工做量。