正則表達式

  • 正則表達式 --用于文本精確匹配
(1).:               代表任意單個字符,除了換行符
(2)*:               前導字符出現(xiàn) 0 次 或 多次
(3).*:              任意長度的字符
(4)^:               行的開頭
(5)$:               行的結(jié)尾
(6)^$:          空行
(7)[abc]            以字符為單位的或關系
(8)[a-z]   [A-Z]   [0-9]
(9)[^abc]           取非
(10)^[abc]          a或b或c開頭的行
(11)^[^abc]         非a或非b或非c開頭
(12)\<:         取單詞的頭
(13)\>:         取單詞的尾

正則表達式是一種描述方法,一種小型的語言,用字符來表示某種含義的符號
一個點代表一個字符
例1 樣式.T.代表3個字符,中間的字符是T 左右兩邊是任意一個字符
例2 ... 代表字符長度是3的字符串,如果要對比 請加入轉(zhuǎn)意符
例3 data... 代表data.后接3個字符,入data.txtt data.cf data.123
^在行首
例如 樣式^jack 代表jack應出現(xiàn)在行首,才符合條件 如jack ding
表示尾部

例 樣式123$ 表示在最后一個行是123才符合條件 如jack123  
123jack  
以下是常見用法  

[A-Z] 匹配一個大寫的字母  
[a-z]匹配一個小寫的字母  
[0-9]一個數(shù)字  
[^A-Z]除了大寫字母之外的一個字符  
[^a-zA-Z] 一個非英文字母的字符  
[^a-zA-Z0-9] 一個非英文字母,并且非數(shù)字的字符  
^出現(xiàn)在括號里的第一個位置 表示"非/不是"的意思  
*出現(xiàn)0個以上  
*表示前面的字符出現(xiàn)0個或者多個  
例 aA*c 代表A這個字符可能出現(xiàn)0個或者0個以上 如:ac aAc aAAc  
{...}指定符合的個數(shù)  
指定符合的個數(shù)  
指定前面字符的個數(shù)  
例如:{3,5}表示前面的字符有3到5個。[a-z]{3,5}、代表以小字母組成的字符串,長度是3到5  
(..)把比對符合的字符串暫時保存起來  
例如:H(..)y表示要保存H和y之間的3個字符  
若要提取保存的字符串,可以用位置參數(shù)。1代表第一個保存的字符串,2代表第二個保存的字符

支持正則表達式工具

  • grep/egrep find locate sed awk vim
grep 'regex' file       --把正則表達式寫在單引號中,防止shell解釋正則表達式
grep -E 'regex' file        --匹配擴展的正則表達式在grep中需要加-E選項
egrep=grep -E

# find / -regex '.*\.iso$'
# find / -regex '^\/var.*\.iso$'

locate -r
# locate -r '^\/var.*\.iso$'


sed -n '/^root/p' /etc/passwd

awk '/^root/ {print $0}' /etc/passwd

vim
/^root
/nologin$
:%s/^root/ROOT/g
  • grep
o:只打印匹配出來的字符
n:顯示行號
v:取反
l:匹配成功,打印文件
c:統(tǒng)計匹配到的字符的數(shù)量,但是統(tǒng)計的是行數(shù),而不是匹配的字符個數(shù)
A:匹配行后幾行
B:匹配行前幾行
C:匹配行前后幾行,  如    -C 2   與   -2
i:忽略大小寫
q:靜默執(zhí)行,一般在測試時,取返回值用
r/R:對一個目錄下的所有文件進行搜索
--color:用特殊顏色標示匹配到的關鍵字
H: 列出匹配到關鍵字的文件路徑

egrep:拓展正則搜索
    egrep = grep -E
    

    
# cat grep.txt 
ggle
gogle
google
gooogle
gagle
gaagle
gaaagle
abcgef

abcdef

操作如下:
grep 'g.g' grep.txt                 --只要兩個g字母中間有一個任意字符就可以
grep 'g*g' grep.txt             --只要有一個g字母就可以。等同于grep g grep.txt
grep 'go*g' grep.txt            --只要兩個g字母中間有零個o或多個o就可以 
grep 'g.*g' grep.txt                --只要兩個g字母中間有零個或任意個字符就可以
grep 'go.*g' grep.txt           --只要go與g字母中間有零個或任意個字符就可以

/etc/passwd
grep ^...t /etc/passwd                          --查找每行里第四個字符為t的行
grep o.....$ /etc/passwd                            --查找每行里倒數(shù)第六個字符為o的行
grep s..n /etc/passwd                           --查找每行里有s和n字符,并且中間有兩個字符的行
grep x:4: /etc/passwd                           --查找uid為4的行(只使用grep和正則表達式,不使用cut或awk的截取)
grep .*:.:4:.*:.*:.*:.* /etc/passwd                 --查找uid里是4的行
grep .*:.:.*4.*:.*:.*:.*:.* /etc/passwd                 --查找uid里包括4的行
grep .*:.*:.*:.*::.*:.* /etc/passwd                 --查找/etc/passwd里注釋列為空的行
grep -v .*:.*:.*:.*::.*:.* /etc/passwd                  --查找/etc/passwd里注釋列不為空的行
grep .*:.*:.*:.*:..*:.*:.* /etc/passwd
grep .*:[!x].*:.*:.*:.*:.*:.*:.*:.* /etc/shadow         --查找不能在登錄界面用密碼正常登錄的用戶
grep root /etc/passwd                           -- 過濾關鍵字
grep '^root' /etc/passwd                        -- 以 root 開頭的行
grep 'bash$' /etc/passwd                        -- 以 bash 結(jié)尾的行
grep '^$' /etc/passwd                               -- 查找空行
grep '^[ru]' /etc/passwd                        -- r 或  u
grep '[0-9]' /etc/passwd                            -- 查找數(shù)字
grep '^[^abc]' /etc/passwd                          -- 取反,非 a 非 b 非 c 開頭
grep '\<root\>' /etc/passwd                         --  \< 取單詞的頭,\> 取單詞的尾
grep -E '^root|^zhang' /etc/passwd  --color         -- 拓展正則 ,  -E,匹配以root 或 zhang 開頭
grep -n root /etc/passwd                        -- 帶行號過濾
grep -oE '(([0-9]{1,3}\.){3}[--9]{1,3})' /var/log/secure    --在文本過濾IP地址

grep [[:digit:]] /etc/passwd 
grep [[:lower:]] /etc/passwd 
grep [[:upper:]] /etc/passwd 
grep [[:space:]] /etc/passwd 
grep [[:alnum:]] /etc/passwd    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容