shell 程式設計3 正則表示式
阿新 • • 發佈:2018-12-18
1 正則表示式和萬用字元:
-
正則表示式用來在檔案中匹配符合條件的字串,正則是包含匹配。 grep、awk、sed等命令可以支援正則表示式。
-
萬用字元用來匹配符合條件的檔名,萬用字元是完全匹配。ls、find、cp這些命令不支援正則表示式,所以只能使用shell自己的萬用字元來進行匹配了。
2 萬用字元介紹:
- * 用來匹配任意內容
- ?用來匹配任意一個字元(有且只有一個字元)
- [] 匹配括號內的一個字元
3.正則表示式
元字元:
* 元字元詳解:
假設檔案a.txt 有為一下內容: a aa aaa aaaa aaaaa b bb bbb bbbb bbbbb 當我們使用命令 grep . a* 是,此時會將所有的字元都輸出,因為* 匹配前面表示式0個或多個,所以都可以匹配
3 字串擷取命令
cut : 對列進行擷取,grep 對行進行擷取
cut是列提取命令,預設用的分隔符是Tab鍵,要指定分隔符用-d選項 當擷取比較規律的文件,如有“:”或有Tab製表符時,用cut擷取比較方便 #cut [選項] 檔名 選項(選項沒有先後順序):
-f 列號:提取第幾列(如果要提取幾列,則用“,”將列號隔開)
-d 分隔符:按照指定分隔符分隔列
注意:如果制定分隔符為一個空格,cut命令只會以一個空格為分隔符,而不會以多個空格為分割符。
printf 命令:
可以執行輸出操作,printf 字串格式 輸出內容
輸出型別:
%ns 代表字串 n表示輸出幾個字串 %ni 輸出整數, n表示輸出幾個數字 %n.mf 輸出小數, n表示有輸出n位,有m位小數 示例: printf "this num is %i" 123 printf "this str is %s" 'str' printf "this float is %8.2f" 123222.3333
輸出轉義字元時,用雙引號括起。
awk命令:
awk '條件1{動作1} 條件2{動作2}...' 檔名,條件滿足時,執行動作
操作文字: student.txt: ID Name gender Mark 1 1 1 1 2 2 2 2 3 3 3 3 獲取第一列和第三列: awk '{printf $2 "\t" $4 "\n"}' student.txt $1表示第一列,$0表示所有的列 檢視記憶體:df -h |awk '{printf $1 "\t" $4 "\n"}' 條件表達時: BEGIN:在讀取之前的操作,可以指定分隔符,使用FS內建變數設定 END:在讀取玩之後的操作 示例: awk 'BEGIN{FS=":"}{printf $1 "\n"}' /etc/passwd //輸出所有使用者 cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"} {printf $1 "\t" $3 "\n"}'
sed: sed命令是用來進行檔案內容修改的。
格式:sed 選項 '動作‘ 檔名
選項:
-n :將處理的行列印到螢幕
-e :允許多條sed命令
-i :修改原始檔
動作:
a 追加
c 行替換
i 插入
p 列印
s 字元替換,格式為 “行範圍s/就字元/新字元/g”
示例:
sed -n '2p' student.student //顯示第二行
sed '2a haha' student.txt //在第二行追加haha
sed '2i haha' student.txt //在第二行前插入
sed '2c haha' student.txt //替換第二行
sed '3s/2/haha/g' student.txt //將第三行的所有 2 替換為haha
sed -e 's/2/haha/g;s/1/ha/g' student.txt 替換第一行的字元和第二行的字元
sort :
排序命令:可以對文字進行排序,以行顯示。
選項:
-f : 忽略大小寫
-n : 以數字大小統計,預設以字元排序
-r : 反向排序
-t : 指定分隔符
-k : 第幾個字元進行排序,與-t 混合使用
示例:
sort /ect/passwd //預設排序
sort -n -t ":" -k 3 /etc/passwd // 以: 為分隔符,以第三個分割的字元進行數字排序
wc : 用來統計行數 , 單詞數,字元數。