正则表达式基础知识及应用(用于个人学习以及回顾)
一. 正則表達式概述
正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為"元字符")。
正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。
總的來說,正則表達式是使用“一串符號”來描述有共同屬性的數據。
二. 正則表達式在Linux中使用
Linux中可使用egrep+正則表達式來進行你想要的過濾。
egrep過濾工具
?? 2.1 文本處理順序
以行為單位,逐漸進行處理
默認只輸出與表達式相匹配的文本行
?? 2.2 基本用法
格式1:egrep [選項] ‘正則表達式’文件
格式2:前置命令 | egrep [選項] ‘正則表達式’
?? 2.3 常用命令選項
-i : 忽略字母大小寫
-v: 條件取反
-c: 統計匹配的行數
-q: 靜默、無任何輸出,一般用于檢測
-n: 顯示出匹配結果所在的行號
--color: 標紅顯示匹配字串?
三. 使用正則表達式
3.1 正則表達式列表
3.2 實例
?1)輸出以“r”開頭的用戶記錄:
[root@client?~]#?grep?'^r'?/etc/passwd root:x:0:0:root:/root:/bin/bash rpc:x:32:32:Rpcbind?Daemon:/var/lib/rpcbind:/sbin/nologin rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin radvd:x:75:75:radvd?user:/:/sbin/nologin rpcuser:x:29:29:RPC?Service?User:/var/lib/nfs:/sbin/nologin2)輸出以“nologin”結尾的行:
[root@client?~]#?grep?'nologin$'?/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin ...?...3)grep檢索式同時組合多個條件,可使用轉義字符或者使用擴展正則
? 輸出以"adm"和“mail”開頭的行(使用轉義字符“\|”):
[root@client?~]#?grep?"^adm\|^mail"?/etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin?輸出以"adm"和“mail”開頭的行(使用拓展正則):
[root@client?~]#?grep?-E?"^adm|^mail"?/etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin4)grep、egrep中-q選項
?選項 -q 表示 quiet(靜默)的意思,結合此選項可以只做檢索而并不輸出,通常在腳本內用來識別查找的目標是否存在,通過返回狀態 $? 來判? 斷,這樣可以忽略無關的文本信息,簡化腳本輸出。
?檢查/etc/hosts文件內是否存在127.0.0.1的映射記錄,如果存在則顯示“YES”,否則輸出 “NO”:
[root@client?~]#?grep?'^127.0.0.1'?/etc/hosts?&&?echo?"YES"?||?echo?"NO" 127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4 YES [root@client?~]#?grep?-q?'^127.0.0.1'?/etc/hosts?&&?echo?"YES"?||?echo?"NO" YES5)基本元字符.---匹配任意單個字符
?以/etc/rc.local文件為例,確認文本內容:
[root@client?~]#?cat?/etc/rc.local? #!/bin/bash #?THIS?FILE?IS?ADDED?FOR?COMPATIBILITY?PURPOSES # #?It?is?highly?advisable?to?create?own?systemd?services?or?udev?rules #?to?run?scripts?during?boot?instead?of?using?this?file. # #?In?contrast?to?previous?versions?due?to?parallel?execution?during?boot #?this?script?will?NOT?be?run?after?all?other?services. # #?Please?note?that?you?must?run?'chmod?+x?/etc/rc.d/rc.local'?to?ensure #?that?this?script?will?be?executed?during?boot. touch?/var/lock/subsys/local輸出/etc/rc.local文件內至少包括一個字符(\n換行符除外)的行,即非空行:
[root@client?~]#?egrep?'.'?/etc/rc.local #!/bin/bash #?THIS?FILE?IS?ADDED?FOR?COMPATIBILITY?PURPOSES # #?It?is?highly?advisable?to?create?own?systemd?services?or?udev?rules #?to?run?scripts?during?boot?instead?of?using?this?file. # #?In?contrast?to?previous?versions?due?to?parallel?execution?during?boot #?this?script?will?NOT?be?run?after?all?other?services. # #?Please?note?that?you?must?run?'chmod?+x?/etc/rc.d/rc.local'?to?ensure #?that?this?script?will?be?executed?during?boot. touch?/var/lock/subsys/local輸出/etc/rc.local文件內的空行(用 –v 選項將條件取反):
[root@client?~]#?egrep?-v?'.'?/etc/rc.local[root@client?~]#上述取空行的操作與下列操作效果相同:
[root@client?~]#?egrep?'^$'?/etc/rc.local[root@client?~]#6)基本元字符+、?、*? (表示目標的出現次數)
就以/etc/rc.local文件為例:
輸出包括 f、ff、ff、……的行,即“f”至少出現一次:
[root@client?~]#?egrep?'f+'?/etc/rc.local輸出末尾的“d”最多出現一次:
[root@client?~]#?egrep?'d?'?/etc/rc.local輸出包括stu、stuf、stuff、stufff、……的行,即末尾的“f”可出現任意多次,也可以沒有。
[root@client?~]#?egrep?'stuf*'?/etc/rc.local輸出所有行,單獨的“.*”可匹配任意行(包括空行):
[root@client?~]#?egrep?'.*'?/etc/rc.local7) 元字符{}---限定出現的次數范圍
創建一個練習用的測試文件:
[root@client?~]#?cat?test.txt? ab?def?ghi?abdr dedef?abab?ghighi abcab?njimkol dfsahghasdfdsa cdcd?ababab Hello?abababab?World輸出包括ababab的行,即“ab”連續出現3次:
[root@client?~]#?egrep?'(ab){3}'?test.txt cdcd?ababab Hello?abababab?World輸出包括abab、ababab、abababab的行,即“ab”連續出現2~4次:
[root@client?~]#?egrep?'(ab){2,4}'?test.txt dedef?abab?ghighi cdcd?ababab Hello?abababab?World輸出包括ababab、abababab、……的行,即“ab”最少連續出現3次:
[root@client?~]#?egrep?'(ab){3,}'?test.txt cdcd?ababab Hello?abababab?World8) 元字符[]---匹配范圍內的單個字符
還以test.txt為例,母的行,使用[A-Z]匹配連續范圍:
[root@client?~]#?egrep?'[A-Z]'?test.txt Hello?abababab?World輸出包括abc、abd的行,即前兩個字符為“ab”,第三個字符只要是c、d中的一個就符合條件:
[root@client?~]#?egrep?'ab[cd]'?test.txt ab?def?ghi?abdr abcab?njimkol9)匹配mac地址
正則表達式匹配的MAC地址可以寫成:
[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}又或者可以這么寫:
[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}10)匹配郵箱地址
電子郵箱地址的特征是“用戶名@域名”,主要包括: ? ?
用戶名與域名之間以 @ 分隔
用戶名不少于3個字符,可能由字母、下劃線、句點 . 、數字組成
域名應至少有一個 . 分隔,分隔的各部分至少2個字符,可能由字母、減號、數字組成
正則表達式可以表示為:
[0-9a-zA-Z_.]{3,}@[0-9a-zA-Z.-]{2,}(\.[0-9a-zA-Z-]{2,})+轉載于:https://blog.51cto.com/11483827/2363787
總結
以上是生活随笔為你收集整理的正则表达式基础知识及应用(用于个人学习以及回顾)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网工的Linux系统学习历程
- 下一篇: CSS-非常有用的css变量