shell正則表達式


正則表達式在每種語言中都會有,功能就是匹配符合你預期要求的字符串。
Shell 正則表達式分為兩種:
  •  基礎正則表達式
  • 擴展正則表達式:擴展的表達式有+、?、| 和()
  1. 正則表達式就是為了處理大量的文本|字符串而定義的一套規則和方法
  2. 通過定義的這些特殊符號的輔助,系統管理員就可以快速過濾,替換或輸出需要的字符串。
Linux正則表達式一般以行為單位處理。
 
正則表達式和通配符有本質區別
  1. 不需要思考的判斷方法:在三劍客awk,sed,grep都是正則,其他都是通配符
  2. 區別通配符和正則表達式最簡單的方法:
    (1)文件目錄名===>通配符
     (2)文件內容(字符串,文本【文件】內容)===>正則表達式
 
注意:在匹配模式中一定要加上引號
符號
描述
                               實例                                
.
匹配任意單個字符(必須存在)
例子:l..e
可以表示
love
like
^
 
匹配前面字符串開頭
 
匹配以 abc 開頭的行:
echo -e "abc\nxyz" |grep ^abc
$
 
匹配前面字符串結尾
 
匹配以 xyz 結尾的行:
echo -e "abc\nxyz" |grep xyz$
*
 
匹配前一個字符的零個或多個
 
a*  表示出現任意個a的情況
a*b 表示b前面有任意個a的情況(包括沒有a的情況)
.* 
表示任意長度的任意字符
例子:過濾出一行中a在前,b在后的行
條件:
包含 a 和 b
字母 a 必須在 b前面
# grep --color "a.*b" b.txt
+(擴展正則)
 
表示其前面的字符出現最少一次的情況
 
匹配 abc 和 abcc:
echo -e "abc\nabcc\nadd" |grep -E 'ab+'
匹配單個數字:echo "113" |grep -o '[0-9]'
連續匹配多個數字:echo "113" |grep -E -o '[0-9]+'
?(擴展正則)
 
表示其前面的字符出現最多一次的情況(可以0個)
 
匹配 ac 或 abc:
echo -e "ac\nabc\nadd" |grep -E 'a?c'
[]
 
表示范圍內的一個字符
例子:過濾出包含數字的行           grep [0-9] a.txt
例子:過濾出包含數字和小寫字母的行 grep [0-9a-z] a.txt
例子:過濾出包含字母asf的行        grep [asf] a.txt
[ .-.]
 
匹配中括號中范圍內的任意一個字符
 
匹配所有字母
echo -e "a\nb\nc" |grep '[a-z]'
[^]
 
匹配[^字符]之外的任意一個字符
 
匹配 a 或 b:
echo -e "a\nb\nc" |grep '[^c-z]'
匹配末尾數字:echo "abc:cde;123" |grep -E
'[^;]+$'
^[^]
 
匹配不是中括號內任意一個字符開頭的行
 
匹配不是#開頭的行:
grep '^[^#]' /etc/httpd/conf/httpd.conf
{n}或者{n,}
 
匹配花括號前面字符至少 n個字符
 
echo "aadadccc" | egrep "a{2}"
echo "aadadccc" | egrep "a{1}"
{n,m}
 
匹配花括號前面字符至少 n個字符,最多 m 個字符
 例子:
"ac\{2,5\}b" 匹配a和b之間有最少2個c最多5個c的行
"ac\{,5\}b" 匹配a和b之間有最多5個c的行
"ac\{2,\}b" 匹配a和b之間有最少2個c的行
\<
 
 錨定單詞首部(單詞一般以空格或特殊字符做分隔)
 
# echo "hi,root,iamroot" | grep "\<root"
hi,root,iamroot
 
# echo "hi,root,iamroot" | grep "\<root\>"
hi,root,iamroot
 
\>
 錨定單詞尾部(單詞一般以空格或特殊字符做分隔,)
 
 
# echo "hi,root,iamroot" | grep "root\>"
hi,root,iamroot
# echo "hi,root,iamroot" | grep "\<root\>"
hi,root,iamroot
()
 
\1  調用前面的第一個分組,即調用前者的結果給后者
 
 
例子:過濾出一行中有兩個相同數字的行
# grep "\([0-9]\).*\1" inittab
 
例子:過濾出行首和行尾字母相同的行
# grep "^\([a-z]\).*\1$" inittab
 
| (擴展正則)
 
匹配豎杠兩邊的任意一個
 例子:過濾出cat 或者Cat
# egrep "cat|Cat" a.txt
# egrep "(C|c)at" a.txt
正則表達式中的{}以及()都需要加上\進行轉義,而擴展正則表達式不需要
擴展正則加了\ 形成沖突導致無用。
|, ?,+是擴展正則獨有的
錨定單詞首部和尾部在擴展正則以及正則中都需要加上\


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM