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

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

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

Sed

強大的地方

擅長對資料行進行處理,

sed

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

用法

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引數的區別

舉例

我們用/ etc/passwd檔案來演示,先來看看sed不加引數跟加上-n引數是怎樣的

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

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

看上圖明白選項一欄-n引數後面的解釋意思了吧,不加引數是輸出了檔案所有資訊並且多列印了第一行的資料,加上-n引數就只打印了第一行的資料,1p就是列印第一行,2p;4,10p就是列印第2行以及第4-10行啦

刪除第1-10行,留意行號變化

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

刪除第1行,第10行,留意行號變化

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

將passwd檔案中包含/sbin/nologin替換為/bin/bash並列印輸出

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

將passwd檔案中第2行的資料替換為test,注意到與s引數的區別了吧

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

在passwd檔案第二行新增test字串

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

在passwd檔案第二行插入test字串

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

刪除passwd檔案的第三行至末尾行

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

Awk

強大的地方

擅長對資料列進行處理,就是把資料逐行的讀入,以空格為預設分隔符再將每行切斷,對切斷的部分再進行分析處理。

用法

awk ‘條件型別1{動作1} 條件型別2{動作2} 。。。’ filename

選項:

-F fs:欄位分隔符,fs是一個字串或者是一個正則表示式,如-F:

如要對資料做特殊處理,可能還會用到awk的內建變數:

舉例

我們還是以/etc/passwd 檔案為例。

以:為分隔符,列印passwd 檔案中每行使用者名稱稱user($1)及使用者uid($3)

。補充:$0代表一整行資料的意思

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

列印passwd檔案中uid>=500 的使用者名稱稱及UID

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

列印passwd每一行的資料,並以:為分隔符計算每行的字元總數列印在每行資料的末尾

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

列印passwd檔案中以:為分隔符第三個欄位即UID>=500的資料所在行號

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

想想日常工作中如何要獲取檔案中第幾行第幾列的資料應該如何操作,如

列印passwd檔案中第一行與最後一行第一列的資料

,sed跟awk結合使用啦。

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

總結:關於sed跟awk日常要用到的用法就說到這裡啦,從事運維的同事一定要熟練運用這兩個工具哦,特別是需要經常做資料彙報的,能減輕很大工作量。