正則表達式正則表達式? ?
元字符:? ? ? ?
. ? ? ? 點表示任意單個字符 最少一次? ? ? ?
\w ? ? ?匹配字母、數字、下劃線、或漢字。? ? ? ?
\s ? ? ?匹配任意空白字符? ? ? ?
\d ? ? ?匹配數字? ? ? ?
\b ? ? ?匹配字符的開始或結束? ? ? ?
^ ? ? ? 匹配首字符? ? ? ?
$ ? ? ? 匹配末尾字符? ? ? ?
\ ? ? ? 轉義字符? ?
反義:? ? ? ?
\W ? ? ?匹配字母、數字、下劃線、或漢字。? ? ? ?
\S ? ? ?匹配任意空白字符? ? ? ?
\D ? ? ?匹配數字? ? ? ?
\B ? ? ?匹配字符的開始或結束? ? ? ?
[^n] ? ?匹配除了n的字符? ?
限定符:? ? ? ?
* ? ? ? 重復任意次? ? ? ?
+ ? ? ? 至少一次? ? ? ?
? ? ? ?重復0次或1次? ? ? ?
{n} ? ? 重復n次? ? ? ?
{n,} ? ?至少重復n次,無上線++ {,n} 至多重復n次,最少0次 (不重復)? ? ? ?
{n,m} ? 至少重復n次,至多重復m次。(字符重復n到m次)? ? ? ?
[1-9] ? 重復指定范圍內的字符? ? 貪婪與懶惰模式:? ? ? ?
*? ? ? 匹配任意字符(盡量少的次數)? ? ? ?
+? ? ? 重復一次或多次(盡量少的次數)? ? ? ?
?? ? ? ?重復0次或1次(盡量少的次數)? ? ? ?
{n,m}? ?重復n到m次(盡量少的次數)? ? ? ?
{n,}? ? 至少重復n次(盡量少的次數)
高級進階:? ? 捕獲:? ? ? ? (exp) ? ? ? ?
匹配括號里的字符(串),并自動保存到自動命名的組里? ? ? ?
(?<name>ex) ?匹配ex,并捕獲文本保存到名字為name的組里? ? ? ?
(?:exp) ? ? ?匹配exp 不捕獲文本,也不匹配組號? ?
零寬斷言:? ? ? ? (?=exp) ? ? ? 匹配exp前面的位置? ? ? ?
(?<=exp) ? ? ?匹配exp后面的位置? ? ? ?
(?<!exp) ? ? ?匹配后面非exp的位置? ? ? ?
(?<!exp) ? ? ?匹配前面非exp的位置? ? ? ?
shell不支持零寬斷言
實例:
1. 取出IP地址的方法?
a.
[root@yanghua shiyan]# ifconfig eth0|grep ‘inet addr’|sed ‘s/^.*addr://g’|sed ‘s/B.*//g’ 192.168.210.128 ?
正則匹配的秘籍: 匹配目標之前的內容時,用“^.*”任意字符開頭,結尾給出具體字符, 例如:
取IP
[root@yanghua shiyan]# ifconfig eth0|grep ‘inet addr’? ? ? ? ? inet addr:192.168.210.128 ?Bcast:192.168.210.255 ?Mask:255.255.255.0
匹配目標之后的內容時,用“.*$”任意字符結尾,開頭給出具字符。
[root@yanghua shiyan]# ?ifconfig eth0|grep ‘inet addr’|sed ‘s/^.*addr://g’ 192.168.210.128 ?Bcast:192.168.210.255 ?Mask:255.255.255.0
?b.
[root@yanghua shiyan]# ifconfig eth0|sed -rn ‘s/^.*r:(.*) ?Bc.*/\1/p’ 192.168.210.128 此處用到了Sed的高級用法:捕獲功能 (exp) ? ? ? ? 匹配括號里的字符(串),并自動保存到自動命名的組里 但是要注意格式:
sed -n -r s/(exp)正則/默認的組’\1 \2’/p’命令’
?c.
sed超復雜用法:(僅供參考)
[root@yanghua shiyan]# ifconfig eth0|sed -rn ‘s/^.*r:([0-9]{,3}.[0-9]{,3}.[0-9]{,3}.[0-9]{,3}) ?Bc.*/\1/p’ 192.168.210.128
?實戰:取出IP和網關
[root@yanghua ~]# ifconfig eth0 eth0 ? ? ?
Link encap:Ethernet ?HWaddr 00:0C:29:14:DD:D3 ? inet addr:192.168.210.128 ?Bcast:192.168.210.255 ?Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe14:ddd3/64 Scope:Link UP BROADCAST RUNNING MULTICAST ?MTU:1500 ?Metric:1 RX packets:3494 errors:0 dropped:0 overruns:0 frame:0 TX packets:2214 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000? RX bytes:306833 (299.6 KiB) ?TX bytes:234127 (228.6 KiB) Interrupt:19 Base address:0x2000?
[root@yanghua shiyan]# ifconfig eth0|sed -r -n ‘s/^.*r:(.*) ?Bcast:(.*) ?Ma.*/\1\n\2/p’ 192.168.210.128 192.168.210.255
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88394