Shell基礎(四):正則表示式、cut、awk、sed命令
前言:
正則表示式是描述字元排列和匹配模式的一種語法規則。主要用於字串的模式分割、匹配、查詢及替換。(主要為了模糊匹配)
1、正則表示式與萬用字元區別
①萬用字元(* ? [])用來匹配符合條件的檔名,是完全匹配。ls、find、cp這些命令不支援正則表示式,支援萬用字元匹配。 ②正則表示式用來匹配在檔案中的字串,是包含匹配。grep、awk、sed等命令支援正則表示式。2、基礎正則表示式
①“*”前一個字元匹配0次或任意多次 “a*”匹配所有內容,包括空格 “ab*”匹配包含ab、abb、abbb...等字元的字串,“*”只對b起作用 “abc*”匹配包含abc、abcc、abccc...等字元的字串3、字元擷取命令
3.1 cut命令
cut命令用於列提取,預設分隔符是tab鍵。
選項:-d指定分隔符,-f指定提取第幾列
例:cut -t ":" -f1 /etc/passwd 已:為分隔符提取檔案的第一列
grep "/bin/bash" /etc/passwd | grep -v root | cut -f1 -d ":" 列出系統中普通使用者的使用者名稱
3.2 awk命令
①語法格式:awk '條件1{動作1}條件2{動作2}...' 檔案
條件,一般使用關係表示式作為條件,如a>10。動作,格式化輸出或流程控制語句
awk一次讀入一整行,預設以tab鍵或者空格為分隔符將一行分為多個欄位,表示為$1、$2、$3...其中$0表示檔名
例:awk '{printf $2 "\n"}' /etc/passwd 列印檔案的第二列,其中的轉義字元要加雙引號
df -h | grep "/dev/sda5" | awk '{print $5}' | cut -d "%" -f1 顯示某分割槽磁碟使用量百分比
awk '$3>60{printk $4}' filename 關係運算符成立才執行括號中命令
②BEGIN、END作為關係表示式,表示命令執行開始時和結束時
例:awk 'BEGIN{FS=":"}{print $1 "\t" $3}' /etc/passwd 開始執行時FS指定分隔符
awk 'END{print "goodbye"}{print $2}' filename 結束時列印一句話
③補充:格式化輸出printf、print
格式:printf '輸出型別輸出格式' 輸出內容
輸出型別:%ns,輸出n個字串。%ni,輸出n個整數。%m.nf,輸出浮點數,n為小數位數,m-n為整數位數
輸出格式:\n換行、\r回車、\a輸出警告聲、\t水平製表符、\v垂直製表符、\b退格符、\f清屏符
print與printf不同之處在於,print自帶換行符,比較方便
3.3 sed命令
sed命令主要用來將資料進行選取、替換、刪除、新增的命令
sed [選項] '動作' 檔名
選項:-n:只會將sed處理的行輸出,否則預設全篇輸出
-e:允許進行多個動作
-i:sed修改預設是臨時修改,-i選項表示直接修改檔案
動作:a:追加,在當前行後新增
c:行替換
i:在當前行前插入
d:刪除指定行
p:列印輸出指定行
s:字串替換,格式:行範圍s/舊字串/新字串/g
例:sed - n '2p' filename 列印輸出第二行
sed -i '2,4d' filename 刪除2至4行
sed -i '2a helloworld' filename 第二行追加內容
sed -i '3c helloworld' filename 替換第3行
sed -i '3i helloworld' filename 在第3行前插入
sed -i '2s/goodbye/goodnight/g' filename 第2行的goodbye替換為goodnight
sed -ie 's/Sunday/Monday/g;s/Tuesday/Saturday/g' filename 同時多個動作
3.4 sort、wc命令
①sort命令用來排序
sort [選項] 檔名
選項:
-f:忽略大小寫
-n:以數值型進行排序,預設是字串排序
-r:反向排序
-t:指定分隔符,預設分隔符是tab鍵
-k n[,m]:指定排序的欄位範圍,n欄位開始,m欄位結束(可選),預設是到結尾
例:sort /etc/passwd 按首字母排序
sort -t ":" -k "3,3" /etc/passwd 指定冒號為分隔符,以第3欄位為排序依據
sort -n -t ":" -k "3,3" /etc/passwd 指定以數字型排序,若以字串形式排序是先判斷第一個字元的順序,第一個字元相同再判斷第2個字元,以此類推
若以數值排序優先順序:1>2>3>12>23>137>258
若以字元排序優先順序:1>12>137>2>23>258>3
②wc命令 統計命令
wc [選項] 檔名
-l:只統計行數
-w:只統計單詞數
-m:只統計字元數,包括換行符