Linux三劍客命令(grep,awk,sed)
本教程是一些Linux命令中關於grep、cut、printf、sed、awk 的一些基本用法,沒有過多的固定格式化語法,而是通過鮮明的對比與例子進行演示,旨在方便大家更好的記憶與理解!
1、grep正則
匹配日期格式 YYYY-MM-DD
[0-9]{4}-[0-9]{2}-[0-9]{2}
匹配IP地址
[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
在這裡我建立了一個a.txt檔案 內容如下
通過grep正則表示式匹配日期 grep ‘[0-9]{4}-[0-9]{2}-[0-9]{2}’ a.txt
通過grep正則表示式匹配IP地址
注意:這裡的 grep -v “root” 意思是 去除帶"root的行" 與 grep “root” 相反
2、Cut
cut [選項] 檔名
選項
-f 列號 :提取第幾列
-d 分隔符 :按照指定分隔符分割列
建立如下製表符分隔的檔案
這裡注意下: 如果不用-d去指定,它的預設分隔符是製表符–tab,結果如下
Cut命令的侷限 df -h | cut -d " " -f 1,3
也就是說 我們以空格做切分,並沒有得到完整的資料 下面會以其他方式解決
3、printf命令
printf ‘輸出型別輸出格式’ 輸出內容
下面調整下輸出格式
4、awk
awk ‘條件1{動作1} 條件2 {動作2}…’
條件:一般使用關係表示式作為條件
動作:格式化輸出,流程控制語句
這裡注意下:awk的預設分隔符是空白(包含空格和製表符)
在awk命令的輸出中時支援printf命令的 下面演示程式碼中的printf也可以換成print
看看,前面用的cut方式沒有得到對應的列 用awk的方式前面那個問題是不是迎刃而解了
下面來演示下 awk、grep、print、cut的綜合應用
BEGIN關鍵在最開始執行,而且只執行一次
同理,END關鍵字在最後執行,而且也執行一次
awk 條件 {動作},這裡是先通過 grep -v name 去除了帶有name的行哦
這裡awk還有一個常用的變數FS,下面我們來應用一下 它是對每行的資料根據某條件進行切分
其中cat /etc/passwd | grep /bin/bash結果是:
5、sed命令
sed 是一種幾乎包括在所有UNIX平臺(包括Linux)的輕量級流編輯器。sed主要是用來將資料進行選取、替換、刪除、新增的命令
sed [選項] ‘[動作]’ 檔名
[選項]
-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到終端上。但如果加上 -n 引數後,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。
-e :直接在命令列模式上進行 sed 的動作編輯;
-f :直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的 sed 動作;
-r :sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
[動作]
a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;
i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行~
s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!
-i :直接修改讀取的檔案內容,而不是輸出到終端。
不帶-n是輸出檔案的全部 帶 -n是輸出指定行
刪除(delete)第三行到第四行的資料
這裡注意下 a (append)與 i (insert)的區別 append是在後面追加資料 insert這裡是在它的指定行插入
對指定行進行替換
在指定行對字串進行替換
注意上面的替換並沒有真正寫入資料檔案中 如果想要寫入檔案中 需要 加上選項 -i 如下
好了,今天的分享就到這裡吧,那你今天收穫了多少呢