正規表示式以及文字編輯利器sed

2021-09-28 13:18:46 字數 3949 閱讀 6018

使用單個字元來描述、匹配一系列符合某個語句規則的字串,由普通字元與特殊字元組成,正規表示式廣泛使用在指令碼程式設計、文字編輯器中。

正規表示式簡寫為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指定字段分隔符,預設...