1. 程式人生 > >linux學習筆記之shell程式設計(一)正則表示式與字元處理

linux學習筆記之shell程式設計(一)正則表示式與字元處理

shell程式設計

基礎正則表示式

正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式

####正則表示式常用的字元(注意區別於萬用字元裡面的符號)####

  • -*,前一個字元重複任意多次
  • . ,匹配任意一個字元
  • ^ 匹配行首
  • $ 匹配行尾
  • [] 匹配括號中的任意一個
  • [^]對中括號中的字元取反
  • \ 轉移符

正則表示式例項

  • grep "a*" text.txt 匹配檔案中的全部內容
  • grep "aa*" text.txt
    匹配至少一個a的行
  • grep "s..d" text.txt 匹配s和d中間有兩個字母的行
  • grep ".*" text.txt 匹配所有內容
  • grep ""a[opd]d text.txt 匹配aod apd add
  • grep "^[0-9] text.txt" 匹配行首是數字的行
  • grep "a\{3\}" text.txt 匹陪剛好出現3次a的行

字元提取命令

cut [op] 檔名 ####、

  • -f 列號,
  • -d 分隔符
    cut 的預設分隔符是製表符tab,需要使用-d指定分隔符,入股是連續的空格作為分隔符,cut命令就會失效

printf ‘輸出格式’,輸出內容

格式化輸出命令,%ns 字串,%ni整數, %m.nf小數,共計m位,小數是n位
/n換行 /r回車 /t製表符
無法使用重定向的方式來輸出檔案內容

awk ‘條件1 {動作1},條件2 {動作2}…’ 檔名

常用條件:大於小於比較,
常用動作:格式化輸出,流程控制
命令例項:
  • awk '{printf $2 "/t" $6 "/n"}' text.txt
    輸出表格的2,6列,可以自動識別多個空格分隔符
  • awk 'BEGIN {print "%s" this is test} {printf $2 "\n"}' text.txt
    在每一次讀取資料之前輸出字串
  • awk 'BEGIN{FS=":"} {printf $2 "\n"} text.txt'指定分隔符是:同理,還有END條件

sed 輕量級的流文字編輯器

支援管道,可以直接編輯命令輸出結果
sed [op] '[動作]' 檔名
  • -n 把經過處理的資料輸出到螢幕
  • -e 允許對輸入資料應用多條sed命令編輯
  1. a\ 追加,在當前行後新增一行多行
  2. c\替換行
  3. p 輸出行
  4. d 刪除行
    程式碼例項
    sed '2p' student.txt 輸出第二行資料
    sed '2a nihao' student.txt 在第二行後追加資料
    sed '2i niyeshi\ duia' student.txt 在第二行前面加入兩行資料,\代表資料沒有輸入完成