1. 程式人生 > >sed、awk——運維必須掌握的兩個工具

sed、awk——運維必須掌握的兩個工具

工作 可能 分隔符 重復 所在 table 先來 選項 存儲

技術分享圖片

今天主要跟大家介紹2個非常霸道的工具,sed和awk,本篇文章將介紹這兩個工具在日常運維中的常用用法,工作中這兩個工具要掌握好了在結合一些管道命令、正則表達式,日常處理事務簡直666啦!

l Sed

1.強大的地方

擅長對數據行進行處理,sed是一種流編輯器,處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。利用sed命令可以將數據行進行替換、刪除、新增、選取等特定工作。

2.用法

sed [-nefr] [動作]

選項:

-n:使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的數據一般都會被列出到終端上。但如果加上 -n 參數後,則只有經過sed 特殊處理的那一行或動作才會被列出來

-e :直接在命令列模式上進行 sed 的動作編輯;
-f :直接將 sed 的動作寫在一個文件內, -f filename 則可以運行 filename 內的 sed 動作;
-r :sed 的動作支持的是擴展型正規表示法的語法。(默認是基礎正規表示法語法)
-i :直接修改讀取的文件內容,而不是輸出到屏幕

動作說明: [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日常要用到的用法就說到這裏啦,從事運維的同事一定要熟練運用這兩個工具哦,特別是需要經常做數據匯報的,能減輕很大工作量。

sed、awk——運維必須掌握的兩個工具