正則就是用一些具有特殊含義的符號組合到一起(稱為正規表示式)來描述字元或者字串的方法。或者說:正則就是用來描述一類事物的規則。
生活中處處都是正則:
比如我們描述:4條腿
你可能會想到的是四條腿的動物或者桌子,椅子等
繼續描述:4條腿,活的
就只剩下四條腿的動物這一類了
在linux中,萬用字元是由shell解釋的,而正規表示式則是由命令解釋的,下面我們就為大家介紹三種文字處理工具/命令:grep、sed、awk,它們三者均可以解釋正則。
引數
-n :顯示行號
-o :只顯示匹配的內容
-q :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容
-l :如果匹配成功,則只將檔名列印出來,失敗則不列印,通常-rl一起用,grep -rl 'root' /etc
-a :如果匹配成功,則將匹配行及其後n行一起列印出來
-b :如果匹配成功,則將匹配行及其前n行一起列印出來
-c :如果匹配成功,則將匹配行及其前後n行一起列印出來
-c :如果匹配成功,則將匹配到的行數列印出來
-e :等於egrep,擴充套件
-i :忽略大小寫
-v :取反,不匹配
-w:匹配單詞
[root@miwifi-r3-srv ~]# cat a.txtgrep種類greproot123
root asdf
root_123
rootss
root 123
[root@miwifi-r3-srv ~]# grep -i "root" a.txt
root123
root asdf
root_123
rootss
root 123
[root@miwifi-r3-srv ~]# grep -w "root" a.txt
root 123
fgrep
pgrep
egrep
正則介紹
^ 行首
$ 行尾
. 除了換行符以外的任意單個字元
* 前導字元的零個或多個
.* 所有字元
字元組內的任一字元
[^] 對字元組內的每個字元取反(不匹配字元組內的每個字元)
^[^] 非字元組內的字元開頭的行
[a-z] 小寫字母
[a-z] 大寫字母
[a-z] 小寫和大寫字母
[0-9] 數字
\< 單詞頭 單詞一般以空格或特殊字元做分隔,連續的字串被當做單詞
\> 單詞尾
擴充套件正則 sed 加 -r 引數 或轉義
grep 加 -e 或 egrep 或轉義
awk 直接支援 但不包含
可以使用--posix支援
[root@miwifi-r3-srv ~]# awk '/ro/' /etc/passwd
[root@miwifi-r3-srv ~]# awk --posix '/ro/' /etc/passwd
sed -n '/roo\?/p' /etc/passwd
sed -rn '/roo?/p' /etc/passwd
? 前導字元零個或乙個
+ 前導字元乙個或多個
abc|def abc或def
a(bc|de)f abcf 或 adef
x\ x出現m次
x\ x出現m次至多次(至少m次)
x\ x出現m次至n次
posix定義的字元分類
[:alnum:] alphanumeric characters.
匹配範圍為 [a-za-z0-9]
[:alpha:] alphabetic characters.
匹配範圍為 [a-za-z]
[:blank:] space or tab characters.
匹配範圍為 空格和tab鍵
[:cntrl:] control characters.
匹配控制鍵 例如 ^m 要按 ctrl+v 再按回車 才能輸出
[:digit:] numeric characters.
匹配所有數字 [0-9]
[:graph:] characters that are both printable and visible. (a space is print-
able, but not visible, while an a is both.)
匹配所有可見字元 但不包含空格和tab 就是你在文字文件中按鍵盤上能用眼睛觀察到的所有符號
[:lower:] lower-case alphabetic characters.
小寫 [a-z]
[:print:] printable characters (characters that are not control characters.)
匹配所有可見字元 包括空格和tab
能列印到紙上的所有符號
[:punct:] punctuation characters (characters that are not letter, digits, con-
trol characters, or space characters).
特殊輸入符號 +-=)(*&^%$#@!~`|\"'{}:;?/>.
注意它不包含空格和tab
這個集合不等於^[a-za-z0-9]
[:space:] space characters (such as space, tab, and formfeed, to name a few).
[:upper:] upper-case alphabetic characters.
大寫 [a-z]
[:xdigit:] characters that are hexadecimal digits.
16進製制數 [0-f]
shell正規表示式
句點 匹配單字元 1 匹配任意單ascii 字元,可以為字母,或為數字。2 舉例 xc.匹配dexc1t 23xcdf 等,w.w.w.匹配rwxrw rw 行首以 匹配字串或字串行 1 允許在一行的開始匹配字元或單詞。2 舉例 01 匹配0011cx4 c01sdf 等,d 匹配drwxr xr ...
shell正規表示式
句點 匹配單字元 1 匹配任意單ascii 字元,可以為字母,或為數字。2 舉例 xc.匹配dexc1t 23xcdf 等,w.w.w.匹配rwxrw rw 行首以 匹配字串或字串行 1 允許在一行的開始匹配字元或單詞。2 舉例 01 匹配0011cx4 c01sdf 等,d 匹配drwxr xr ...
shell 正規表示式
一 從頭開始 echo the book sed n the p 二 結尾 三 聯合定位 this is a test 四 點字元 用於匹配除換行符之外的任何乙個單一字元 五 字元類 定義一類字元,用於匹配文字模式中的某一位置 例如 echo n ch at p data the cat is sl...