首頁  >  文章  >  運維  >  正規表示式

正規表示式

巴扎黑
巴扎黑原創
2017-07-21 10:03:232032瀏覽

一、正規表示式

1、符合字元的型別

  • [a-z]:小寫字母

  • [A-Z]:大寫字母

  • [a-Z]:小或大寫字母

  • [0-9]:數字

  • #[a-zA-Z0-9]:表示符合一個為字母或數字的字元

  • . :符合1個任意字符,空格除外 

  • [0-f]:16進位數

  • abc | def:abc或def

  • a (bc | de) f:abcf 或adef

  • \<:單字頭單字一般以空格或特殊字元做分隔,連續的字串被當做單字

  • \>:單字尾

  • [^表達式]:除小寫字母以外的所有字符,如此類推。

2、後面跟著以下符號控制匹配的數量

此類符號的左邊要有上面第一點的表達式

  • #表達式*:0或n個字元

  • 表達式+:1或n個字元

  • 表達式?: 0或1個字元

  • 表達式{n}:n個字元

  • 表達式{n:m}:n到m個字元

  • 表達式{n,}:至少n個字元

【範例】[a-z]*表示符合0個或多個小寫字母

3、將符合的字元控制在頭尾

  • #^表達式:頭部符合

  • #表達式$:尾部符合

 

二、Linux三大文字處理工具

1、egrep 篩選工具

grep的擴充版,可以使用正規表示式

語法:

egrep -選項 '正規表示式'  檔名

#選項:

  • -n :顯示行號

  • -o :只顯示符合的內容

  • -q :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容

  • - l :如果匹配成功,則只將文件名打印出來,失敗則不打印,通常-rl一起用,grep -rl 'root' /etc

  • -A :如果匹配成功,則將匹配行及其後n行一起打印出來

  • -B :如果匹配成功,則將匹配行及其前n行一起打印出來

  • #-C :如果符合成功,則將符合行及其前後n行一起列印出來

  • --color

  • -c :如果匹配成功,則將匹配到的行數列印出來

  • -i :忽略大小寫

  • ##- v :取反,不符合

  • -w:符合單字

2、sed 流編輯器

語法:

語法1:sed  -選項 '數字定位+指令'  檔案名稱

選項:

  • -n:靜默模式,不輸出

  • -e:多項編輯,這個不是很清楚

  • -i:直接修改檔案內容,而不是輸出

  • -r:擴充模式,可使用正規表示式

  • -f:指定檔案名,將動作寫在新的檔案內

定位:

#①數字定位(輸入行序號定位)

  • 1:單行 

  • 1,3:從第一行到第三行

  • 2 ,+4:符合行後若干行

  • 4,~3:從第四行到下一個3的倍數行

  • ##2 ~3:第二行起每間隔三行的行
  • $:尾行
  • #1!:除了第一行以外的行
【範例】sed -n '1p' /etc/passwd

②正規表示式定位

    #正規必須用//包起來
  • 擴充正規則需要用-r 參數或轉義
  • 替換可使用正規表示式的子模式,即小括號(),可以\1、\2代表子模式
【範例】sed -r 's/ (.)(.)/\2\1/ file1 表示將匹配到的第一部分和第二部分替換

*貪婪選項:填上g,代表把一行中所有符合項目替換

指令:

    a ∶ 追加append, 
  • #c ∶ 改變change, 
  • d ∶ 刪除delete,
  • i ∶ 插入insert, i 的後面可以接字符串,而這些字符串會在新的一行出現(目前的上一行)
  • p∶ 打印print
  • s∶ 取代substitute,可以直接進行替換的工作。通常這個 s 的動作可以搭配正規表示式。例如1,20s/old/new/g
*s指令特別說明:

使用{指令1:指令2:指令3}可增加使用多個指令

s指令語法:sed  -r  '取代指令s/正規表示式/取代內容/貪婪選項g'  檔名

3、awk 文字分析工具

由指令、正規(需要用//包圍起來)、比較和關係運算組合而成

#使用option中的-F參數定義間隔符號

以$1,$2,$3等的順序表示files中每行以間隔符號分隔的各列不同域,NF變數表示目前記錄的欄位數

語法

awk -選項參數 '邏輯判斷{指令變數1,變數2,變數3}' 檔案名稱

選項

  • -F 定義欄位分隔符,預設的分隔符號是連續的空格或製表符

  • -v 定義變數並賦值也可以藉用次方式從shell變數中引入

AWK變數

  • NR 目前記錄的數量(全部檔案連線後的統計)

  • ##FNR目前記錄的個數(僅為目前檔案的統計,非全部)

  • FS 欄位分隔符號預設為連續空格或製表符,可以使用多個不同的符號做分隔符-F[:/]

  • OFS 輸出字元的分隔符號預設是空格

##【OFS範例】

# awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd

root===== x

    NF 目前讀入行的字段數
  • #ORS 輸出記錄分隔符號預設是換行
【ORS範例】

# awk -F: 'ORS="=====" {print $1,$2}' /etc/ passwd

root x=====bin x=====

    #FILENAME 目前檔名
【範例1】使用AWK變數

# awk '{print NR,FNR,$1}' file1 file2 
#1 1 aaaaa
2 2 bbbbb
3 3 ccccc
4 1 dddddd
5 2 eeeeee
6 3 ffffff

【範例2】

引用shell變數的方法# # a=root

# awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd

或將整個指令拆開傳遞,讓shell變數外露,
# awk -F: '$1 == "'$a'" {print $0}' /etc/passwd
# a=NF
# awk -F: '{print $'$a'}' /etc/passwd

 

邏輯運算(可直接引用域進行運算)

    = += -= / = *=:賦值
  • && || !:邏輯與邏輯或邏輯非
  • ~ !~:匹配正規或不符,正規需要用/正規/ 包圍住
  • < <= > >= != ==:關係,比較字串時要把字串用雙引號引起來
  • $:欄位參考需要加$,而變數引用直接用變數名稱取
  • #+ - * / % ++ --:運算符
轉義序列

    #\\ \自身
  • \$ 轉義$
  • \t 製表符
  • #\b 退格符號
  • \r 回車符號
  • \n 換行符號
  • #\c 取消換行
 

有錯誤請指正,更多詳細資料參考:

以上是正規表示式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn