shell(正則表達式)


正則表達式的學習

一、正則表達式使用場景:

# linux: vim  grep  sed  awk 
# 作用;用於匹配文本字符串中符合正則的字符,其實就是過濾文本字符串

實例:
匹配數字: ^[0-9]+$  匹配數字1個或多個
匹配Mail: [a-z0-9A-Z_]+@[a-zA-Z0-9]+\.[a-z]+ 	
匹配IP: ([0-9]{1,3}\.){3}[0-9]{1,3}

二、shell的通配符與正則的元字符的關系

# 首先搞清楚:
	1、shell本身是不支持正則的,只是有些文本篩選工具里支持用正則里的元字符來匹配文本字符串,如grep sed awk vim/vi
	2、正則里的元字符是包含shell中的通配符的

#使用區別:
	shell通配符用於文件名匹配,它是由shell解析的,比如find,ls,cp,mv等
	正則元字符適用於建立匹配規則的,用於篩選文本數據的

#shell中有哪些常用的通配符、特殊字符及其含義;

在shell中,匹配[]里面的字符時,是不區分大小寫的,但是正則里嚴格區分大小寫

shell中常用的通配符 含義 實例
* 匹配0或多個字符! a*b表示要么ab,要么axxxxxb,跟正則不一樣,不是b、ab、 aab、 aaaab,不需要為*前面字符服務
匹配1個也必須1個任意字符! a?b,可以是aab abb axb
[123] 匹配列表中任意1個字符
[!]或[^123] 匹配除列表中任意1個字符
[a-b] 匹配列表a到b中任意1個字符字符
[!a-b]或[^a-b] 匹配不在a到b間任意1個字符
{a,b,...} 匹配a或b或列表中任意1個字符

#shell中的常用特殊字符

特殊字符 含義 實例
= 定義賦值變量 定義a="asd" 調用$a 或${a}
$ 變量的調用 同上
> 數據流重定向 file1 > file2 或 命令 > file !就是把結果導入
< 數據流重定向 同上,只是導入方向相反
| 接受命令結果的管道符號 ls | grep ' a*b' ! 把ls命令結果給到后面命令作篩選
& 不太清楚
() 可以作數組$(1 2 3),也可以作運算、命令的替換 1. a=$(命令)等同a=`命令` 把命令結果賦值給a;2. 定義數組data=(n1 n2 n3),調用數組元素${data[index]}
{} 調用變量時作為界定變量名的邊界, 1、ab_c="hello" ,千萬別這樣ab-c=“hello world”,被坑過!變量名之間不能用 - ,2、調用${ab_c},${ab_c:1:3}從下標(o開始算)1取3個,${ab_c:1}=${ab_c:1:4} 不寫步長默認取后面所有 3、${ab_c/l/a} 把第一個l換成a 或${ab_c//l/a} 把所有l換成a 4、${ab_c#*l} 結果為lo 或 ${ab_c##*l} 結果為 o 5、${ab_c%l* } 結果為 hel 或 ${ab_c%%l*} 結果為 he
; 承接上一個命令,類似於| 我的理解等同|
|| 或運算符 {
&& 與運算符 [[ 表達式1 ]] && [[ 表達式2 ]]; echo $? , 要兩個表達式成立為真就結果為真
! 非運算 [[ !- z '']] = [[ -n '' ]]
# 腳本注釋 #!/bin/bash
\ 字符轉義:把通配符、元字符去特殊其含義,就顯示本來樣子

正則的元字符

元字符 含義
* 匹配前面那個字符0次或多次,就是前面那個字符可有可無
. 匹配任意一個字符(除換行回車外), 等同於shell里面的?
? 匹配前面字符0個或1個
^ 匹配是否以后面的字符或字符組為開頭
[1] 匹配以[]里面開通的任意一個字符開頭的
[^] 匹配除[]里面的字符外所有任意單個字符
[] 匹配以除[]里面字符外所有任意單個字符
$ 匹配是否以前面的字符或字符組為為結尾
[] 匹配[]里面的任意一個字符集
\ 轉義或屏蔽一個元字符的特殊意義
[a-b] 匹配任意一個在a到b范圍內的字符
+ 匹配前面字符1個或多個個
() 就是把1個或多個字符捆在一起當成1個字符
| 就是或的意思a
\<a 匹配詞首以a開頭的單詞
a\> 匹配詞尾以a位結尾的單詞
\<ab\> 只匹配ab這個字符整體
\(1.2.3.\)4 把1.2.3.作為一個整體字符!如我想把1.2.3.4換成1.2.3.5, 則/\(1.2.3.\)4/ \15/
x\{n\} 匹配x重復出現n次
x\{n,\} 匹配x重復出現n次以上
x\{n,m\} 匹配x出現n到m次

正則元字符總結:

1、 * ? + {} 都是為了服務於前面那個字符而生的,不能獨立存在!如果前面字符是(),那就是服務於字符組()里面字符
2、\w等同[a-zA-Z0-9]
	\W等同[^a-zA-Z0-9]

  1. ↩︎


免責聲明!

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



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