正則表達式 常用

規定一些特殊語法表示字符類、數量限定符和位置關係,然後用這些特殊語法和普通字符一起表示一個模式,這就是正則表達式(Regular Expression)。


egrep:grep -E,表示採用Extended正則表達式語法。
fgrep:grep -F,表示只搜索固定字符串而不搜索正則表達式模式,不會按正則表達式的語法解釋後面的參數。


正則表達式參數用單引號括起來了,因爲正則表達式中用到的很多特殊字符在Shell中也有特殊含義(例如\),只有用單引號括起來才能保證這些字符原封不動地傳給grep命令,而不會被Shell解釋掉。

1.字符類
.               匹配除換行符以外的任意一個字符 如:abc. 結果爲 abcd, abc9 
[m-n]       匹配[]中的一個字符,減號-表示範圍。數字或字符都可以。
[^xy]        匹配除x或y開頭的任一字符,如排除x1,y2
[[:xxx:]]   預定義的 [[:alpha:]]匹配一個字母,[[:digit:]]匹配一個數字

\w 匹配字母或數字或下劃線或漢字 [ a-z0-9A-Z_]

\s 匹配任意的空白符

\d 匹配數字 [0-9]    \d不一定好使

  • \W 匹配任意不是字母,數字,下劃線,漢字的字符
  • \S 匹配任意不是空白符的字符
  • \D 匹配任意非數字的字符

2.數量限定符
x表示一個或多個字符或者一種模式  也可以理解爲重複前面的次數
x?         x要匹配0或1次        Windows\d+匹配Windows後面跟1個或更多數字   單詞  數字 0或1次
x+         x要匹配1或多次      ^\w+匹配一行的第一個單詞(或整個字符串的第一個單詞
x*          x要匹配0或多次   
x{n}      x要精確匹配n次 
x{m,n}  x匹配m到n次
x{m,}    x至少匹配m次
x{,n}     x最多匹配n次

3.位置限定符
^x       以x開頭的行  [^x ] 匹配除了x以外的任意字符
x$       以x結尾的行
  ^$     空行
\<x      以x開頭的單詞
x\>      以x結尾的單詞
\bx或 x\b    匹配x開頭或x結尾的位置    \bat\b匹配... at ...,但不匹配cat、atexit、battry
\Bx或x\B    匹配x開頭和x結尾的位置    \Bat\B匹配battery,但不匹配... attend、hat ...

\G 上一個匹配的結尾(本次匹配開始)

\A 字符串開頭(類似^,但不受處理多行選項的影響)

\Z 字符串結尾或行尾(不受處理多行選項的影響)

\z 字符串結尾(類似$,但不受處理多行選項的影響)

例子:
cat  1.txt
at
i am at home
cat
attend
whatis this
thisatthis
>>grep '\bat\b' 1.txt
at
i am at home

>>grep '\Bat\B' 1.txt
whatis this
thisatthis


4.其他
\  轉義 比如\.
() 作爲一個整體
|  或   abc[d|f]  匹配abcd, abcf

 字符轉義

  •  

grep -E  '^([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})$' 1.txt
192.168.0.111
^  限制開頭是3位 ,以防找出1192.168.xxx這種字符串
$  限制末尾是3位, 以防找出xxx.168.xxx.1111這種字符串
---------------

0[0-9]{2}-[0-9]{8}|0[0-9]{3}-[0-9]{7}

這個表達式能匹配兩種以連字號分隔的電話號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)。

\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}    \d可換成[0-9]

這個表達式匹配3位區號的電話號碼,其中區號可以用小括號括起來,也可以不用,區號與本地號間可以用連字號或空格間隔,也可以沒有間隔。

假設 file.txt 內容如下:

leecode題目

987-123-4567
123 456 7890
(123) 456-7890
你的腳本應當輸出下列有效的電話號碼:

987-123-4567
(123) 456-7890

grep -E '^((\([0-9]{3}\)\s)|([0-9]{3}-))[0-9]{3}-[0-9]{4}$' file.txt

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