簡單說,正則表達式是一套處理大量的字符串而定義的規則和方法
例如:假設@代表12345
通過正則表達式這些特殊符號,可以快速的過濾,替換需要的內容。
linux正則一般以行為單位來處理
2 2.為什么要學習正則表達式:在linux運維工作中,時刻面對著大量的日志,程序,命令的輸出。迫切的需要過濾我們需要的一部分內容,甚至是一個字符串。
3 3.兩個注意事項1)正則表達式的應用非常廣泛,存在于各種語言中,如Perl,php,java等。
此文檔是linux中的正則表達式的相關應用及說明;
常見的正則表達式三劍客命令為:grep(egrep),sed,awk;要想三劍客更靈活,那就一定離不開正則表達式
2)linux正則表達式和我們命令行中其他的命令使用的通配符是有本質區別的。
eg: ll *.sh ;其中的*屬于通配符
4 4.使用正則表達式前注意如下事項1)linux正則一般以行為單位來處理
2)設置別名,可讓過濾的字符顯示顏色; alias grep='grep --color=auto';可將別名設置放在/etc/PRofile文件中,并通過source /etc/profile使用配置生效。
3)注意字符集:LC_ALL=C
5 5.linux正則表達式(詳解)linux基于grep命令的正則表達式(注:過濾的是基于字符形式,非行結果)
5.1 基礎正則表達式:BRE(basic regular expression)^Word ;表達搜索以word開頭的內
eg:
#grep "^I" filename ;過濾以I開頭的行
word$ ;表達搜索以word結尾的內容
eg:
#grep "m$" filename ;過濾以m結尾的行
^$ ;表示空行
eg:
#grep -v "^$" filename ;過濾非空行內容“-v”參數
. ;代表且只能代表任意一個字符


注釋:此中的”.”表達過濾出任意字符,但因為沒字符,所以沒出來。
eg:
# cat test1
wangb
wan.bai
bai
gui
# grep "wan.b" test1 ;表示過濾wan并以任意一個字符b顯示
注意"."是匹配一個字符
/;轉義字符,讓有著特殊身份意義的字符,脫掉馬甲,還原原型。
eg:
/^word;表達^word字符,在此并不表示以word開頭含義
*;重復0個或多個前面的一個字符,不代表所有了。
eg:
# grep "0*" test1
wangdb00123
wa000012333n.bai
bai
gui
# grep -o "0*" test1 ;不加“-o”參數的話會顯示所有
00
0000
.* ;匹配所有的字符
。。。
^.* ;表示以任意多個字符開頭
。。。
[abc] ;匹配字符集合內任意一個字符[a-z]

[^abc] ;在中括號里面表示非,表示不包含a或b或c

{n,m} ; 重復n到m次,前一個字符
{n,} ; 至少N次,多了不限
{n} ; N次
{,m} ; 至多m次,少了不限。
注:grep 要對{轉義} /{/},egrep不需要
eg:
#grep "0/{3,5/}" filename ;匹配3到5個0的字符過濾出來
#egrep "0{3}" filename
#grep -E --color=auto "0{1}" test ;加-E參數可不用加“/"轉義符.


注:重要參數“-o” 只截取匹配的內容?。?!
總結:
grep命令常參數
-v 排除匹配的內容
-E 支持擴展的正則表達式
-i 忽略大小寫
-o 只輸出匹配的內容
--color=auto 匹配的內容顯示顏色
-n 顯示行號
5.2 基礎正則案例:通過ifconfig獲取ip地址,或特定文本中某些值
方法1:
方法1實現思路:先通過grep命令過濾出行,然后通過sed命令的^.*任意字符開始的,和.*$任意字符結尾的進行匹配。
[root@bogon zzbds]# cat test1
wangdb00
wa000012333n.bai
bai
gui
[root@bogon zzbds]# cat test1 |grep "wa00"
wa000012333n.bai
[root@bogon zzbds]# cat test1 |grep "wa00" |sed 's/^.*0000//g'
12333n.bai
[root@bogon zzbds]# cat test1 |grep "wa00" |sed 's/^.*0000//g'|sed 's/33n.*$//g'
123
方法2:
實現思路:要用到sed相關參數
sed:
s 替換
-i 修改
-n 取消默認輸出
-p 打印內容
模板:sed -n 's#/(aaa/)/(bbb/)#/1/2#g'
[root@bogon zzbds]# ifconfig|sed -n 's/^.*addr:/(.*/) Bcast:.*$//1/gp'
192.168.26.128
[root@bogon zzbds]#ifconfig|sed -n 's#^.*addr:/(.*/) Bcast:/(.*/) Mask.*$#/1 /2#gp'
192.168.26.128192.168.26.255
5.3 擴展正則表達式1)+ ; 重復一個或一個以上前面的字符
2)? ; 重復0個或一個前面的字符
3)| ; 用或的方式查找多個符合的字符串
4)() ; 找出“用戶組” 字符串
新聞熱點
疑難解答