使用單個字元來描述、匹配一系列符合某個語句規則的字串,由普通字元與特殊字元組成,正規表示式廣泛使用在指令碼程式設計、文字編輯器中。
正規表示式簡寫為regex、regexp、re。
在大多數語言當中正規表示式都被包括在兩個正斜槓當中』/』
正規表示式有乙個特點貪婪匹配:盡量匹配最長的的東西
例子1:
[root@localhost ~]
# ls -l /home \
> /tmp
例子2:
[root@localhost ~]
# grep "b.*in" a.txt
12 bin 34
23 sb.
*in 23
44 binary 49
23 binlog 23
[root@localhost ~]
# grep "b\.\*in" a.txt
23 sb.
*in 23
^ 匹配字串開始的位置,以…為開頭的
$ 匹配字串結束的位置,以…為結尾的
^$ 表示空行,不是空格
例子:
[root@localhost ~]
# cat a.txt
aaaa bb aa
a b a
[root@localhost ~]
# grep "^aa$" a.txt
aa
. 匹配任意字串
* 匹配前面子表示式(字元)0次或者多次
例子:[root@localhost ~]
# grep "a 0*" a.txt
aa 0
aa 00
aa bb 0000 aa 00
a b a 000
.* 匹配任意字串
[list] 匹配list列表中的乙個字元,例如:[abc]、[a-z]、[a-za-z0-9]
例子:[root@localhost ~]
# ifconfig ens32 | grep "tx [pe]"
tx packets 1776 bytes 206946 (202.0 kib)
tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[^list] 匹配任意非list表中的乙個字元,例如:[^a-z]、[^0-9]、[^a-z0-9]
例子:[root@localhost ~]
# ifconfig ens32 | grep "tx [a-f]"
tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]
# ifconfig ens32 | grep "tx [^a-f]"
tx packets 1814 bytes 210662 (205.7 kib)
\ 匹配前面子表示式n次
例子:[root@localhost ~]
# grep "a 0\" a.txt
aa 00
aa bb 0000 aa 00
a b a 000
\ 匹配前面子表示式至少n次
[root@localhost ~]
# grep "a 0\" a.txt
aa 00
aa bb 0000 aa 00
a b a 000
\ 匹配前面子表示式最少n次,最大m次
\< 詞首牟定:固定詞首
\> 詞未牟定:固定詞尾
例子:[root@localhost ~]
# grep "\" a.txt
a b a 000
轉義字元
意義\a
響鈴(bel)
\b退格(bs),將當前位置移到前一列
\n換行(lf)將當前位置移到下一行的開頭
\r回車(cr)將當前位置移動到本行開頭
\t水平製表(ht)調到下乙個tab位置
\v垂直製表(vt)
\代表乙個反斜槓字元「\」
+ 匹配前面子表示式1次及以上
? 匹配前面子表示式0次或者1次
() 將括號中的字串作為乙個整體
| 以或的方式匹配字串
正規表示式和我們命令列中使用的萬用字元是有本質區別的。
萬用字元一般是處理檔名的
ls -l *.txt
*:任意長度任意字串,屬於萬用字元。
?:單個任意字串,屬於萬用字元。
-v 排除匹配的內容(取反)
-e 支援擴充套件正規表示式=egrep
.conf-i 忽略大小寫
[root@localhost ~]
# cat a.txt
aaaa
[root@localhost ~]
# grep -i "a" a.txt
aaaa
[root@localhost ~]
#
-o 只輸出匹配的內容
[root@localhost ~]
# grep -o "root" /etc/passwd
root
root
–color=auto 匹配的內容顯示顏色(用的不多 alias檢視別名)
-n 在行首顯示行號
[root@localhost ~]
# grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
43:admin:x:1000:1000:root:/home/admin:/bin/bash
-q 匹配內容不顯示(靜默輸出,一般寫指令碼的時候用而不輸出到螢幕)
-w 將過濾條件當成單詞來匹配
[root@localhost ~]
# grep -w "bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
admin:x:1000:1000:root:/home/admin:/bin/bash
[root@localhost ~]
# grep "bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
-c 只輸出匹配行的計數
[root@localhost ~]
# grep -c "root" /etc/passwd
3
小知識:
nohup 執行的指令碼 /
/不依賴終端執行指令碼,會將資訊放到nohup檔案裡
正規表示式文字過濾
1.grep 預設是按照以行為基本單位進行匹配和顯示的。2.grep預設匹配只要包含模式字元即可 grep w 是按單詞匹配,和普通的匹配不一致 單詞的分隔符,數字加字母加下劃線都算做單詞的一部分 匹配顯示結果的行號 grep 並且關係和 或者關係 1.並且 grep root etc passwd...
grep以及正規表示式
grep 根據模式搜尋文字,並將符合模式的文字行列印出來 i 忽略大小寫 v 搜尋不符合模式的文字行 o 列印完全匹配的字元 color 匹配的字元高亮 a num 列印匹配的文字行以及文字的後num行 b num 列印匹配的文字行以及文字的前num行 c num 列印匹配的文字行以及文字的前後nu...
sort,uniq,tr以及正規表示式
以行為單位對檔案內容進行排序,也可以根據不同的資料型別來排序。語法格式 sort 選項 引數 cat file sort 選項 常用選項 f 忽略大小寫,缺省會將大寫字母排在前面 b忽略每行前面的空格 n按照數字進行排序 r反向排序 u等同於uniq,表示相同的資料僅存在一行 t指定字段分隔符,預設...