Shell基礎(四):正則表達式、cut、awk、sed命令

前言:

正則表達式是描述字符排列和匹配模式的一種語法規則。主要用於字符串的模式分割、匹配、查找及替換。(主要爲了模糊匹配)

1、正則表達式與通配符區別

通配符(* ? [])用來匹配符合條件的文件名,是完全匹配。ls、find、cp這些命令不支持正則表達式,支持通配符匹配。
正則表達式用來匹配在文件中的字符串,是包含匹配。grep、awk、sed等命令支持正則表達式。

2、基礎正則表達式

“*”前一個字符匹配0次或任意多次
“a*” 匹配所有內容,包括空格
“ab*” 匹配包含ab、abb、abbb...等字符的字符串,“*”只對b起作用
“abc*” 匹配包含abc、abcc、abccc...等字符的字符串
“.”匹配除了換行符外任意一個字符
“s..d” 匹配s和d之間有兩個字符的
“ s.*d ” 匹配s和d之間有任意多字符
“^”匹配行首,“$”匹配行尾
“^a” 匹配以a開頭的行
“$a” 匹配以a結尾的行
“^$” 匹配空白行
[]匹配中括號中指定的任意一個字符
“a[bcd]f” 匹配abf、acf、adf中的一個
“^[0-9]” 匹配數字開頭的行
[^]匹配空號中字符以外的一個字符
“^[^0-9]” 匹配以非數字開頭的行
“^[^a-zA-Z]”匹配非字母開頭的行
“\”轉義字符,使之後的一個特殊字符變爲普通字符
“\*” 就是普通字符*
“\$$” 匹配以$結尾的行
“\{n\}”匹配前面字符出現n次的字符串
“a\{4\}” 連續出現4個a的行
“[0-9]\{4\}”連續出現4個數字的行,不一定完全一樣的數字
“a\{2,5\}” a最少出現2次,至多出現5次的行
例:
“[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}”匹配格式爲1991-04-15的日期
[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}”匹配格式爲192.168.1.103的IP地址

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:只統計字符數,包括換行符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章