您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎樣看待Linux系統(tǒng)的正則表達(dá)式,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
Linux系統(tǒng)正則表達(dá)式的介紹
學(xué)習(xí)Linux系統(tǒng)的朋友們肯定都會(huì)接觸到正則表達(dá)式,或者開(kāi)發(fā)人員也會(huì)遇到這個(gè)東東,說(shuō)起正則表達(dá)式,使我想起“會(huì)者不難,難者不會(huì)”這句話,的確如此,相信很多人剛接觸正則表達(dá)式,肯定一頭霧水,覺(jué)得很難學(xué)會(huì),是的,民工哥也是這么個(gè)感覺(jué),但是相信大家都認(rèn)真去學(xué)習(xí)、去練習(xí),肯定能學(xué)會(huì)的。
那么今天就來(lái)聊一聊正則表達(dá)式
何謂正則表達(dá)式呢?網(wǎng)上一堆的名詞介紹,大家可以自己查找,民工哥的理解是:首先它是一種文本模式,然后它的作用就處理字符串的一種方法
給定一個(gè)正則表達(dá)式和另一個(gè)字符串,我們可以達(dá)到如下的目的
1. 給定的字符串是否符合正則表達(dá)式的過(guò)濾邏輯(稱(chēng)作“匹配”)
2. 可以通過(guò)正則表達(dá)式,從字符串中獲取我們想要的特定部分
正則表達(dá)式的特點(diǎn)是:
1. 靈活性、邏輯性和功能性非常的強(qiáng)
2. 可以迅速地用極簡(jiǎn)單的方式達(dá)到字符串的復(fù)雜控制
3. 對(duì)于剛接觸的人來(lái)說(shuō),比較難懂
因些我們也是有必要了解下正則需要用到的字符含義
\ 轉(zhuǎn)義符,就是將特殊符號(hào)的意義去除掉
.任意一個(gè)字符
* 重復(fù)零個(gè)或者多個(gè)*前的一個(gè)字符
\{n,m\連續(xù)n到m個(gè)前一個(gè)重復(fù)字符
[ ]字符集合
.*匹配所有字符
^匹配以以某字符開(kāi)頭
$匹配以以某字符結(jié)尾
[^]取反
^.*匹配多個(gè)任意字符開(kāi)頭
|或
[A-Z] 26個(gè)大寫(xiě)字母
[a-z] 26個(gè)小寫(xiě)字母
[0-9] 0至9數(shù)字
[A-Za-z0-9] 26個(gè)大寫(xiě)字母、26個(gè)小寫(xiě)字母和0至9數(shù)字
\d匹配一個(gè)數(shù)字字符
\w匹配包括下劃線的任意單詞字符
grep 文本搜索工具
grep 參數(shù) 查找條件 文件名
主要參數(shù):
-c:只輸出匹配行的計(jì)數(shù)
-I:不區(qū)分大 小寫(xiě)(只適用于單字符
-l:查詢多文件時(shí)只輸出包含匹配字符的文件名
-n:顯示匹配行及 行號(hào)
-s:不顯示不存在或無(wú)匹配文本的錯(cuò)誤信息
-v:顯示不包含匹配文本的所有行
sed 在線編輯工具
[root@Centos bbs]# man sed
NAME
sed - stream editor for filtering and transforming text
用于過(guò)濾或轉(zhuǎn)換文本的流編輯器
sed 參數(shù) 動(dòng)作
主要參數(shù):
-n:取消默認(rèn)輸出
-i:修改文件內(nèi)容
動(dòng)作:
p 打印
d 刪除
s#x#xx#g 替換與全局替換 將X全局替換掉XX
awk 文本處理工具
[root@Centos /]# man awk
NAME
gawk - pattern scanning and processing language
awk '條件1 {動(dòng)作1} 條件2{動(dòng)作2}........' 文件名
-F 使用分隔符
==等于
NR 取行
grep、sed、awk的參數(shù)非常的多,大家有興趣可以慢慢研究,查看幫助文檔
舉例說(shuō)明
例一:將系統(tǒng)用ifconfig命令列出的信息中eth0的IP地址打印出來(lái)
也就是說(shuō)用命令將192.168.1.2輸出在屏幕上
方法一:
[root@Centos /]# ifconfig eth0 |grep "inet addr"
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
首先將帶有IP地址行過(guò)濾打印出來(lái),然后再進(jìn)行過(guò)濾取出IP地址
[root@Centos /]# ifconfig eth0 |grep "inet addr"|awk -F '[ :]+' '{print $4}'
192.168.1.2
以空格和:做為分隔符,+代表前面多個(gè)重復(fù)的分隔符識(shí)為一個(gè),將第四列打印
方法二:
[root@Centos /]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:AA:CA:2B
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7005 errors:0 dropped:0 overruns:0 frame:0
TX packets:3095 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:709421 (692.7 KiB) TX bytes:454116 (443.4 KiB)
[root@Centos /]# ifconfig eth0|awk -F '[ :]+' NR==2 取整個(gè)內(nèi)容第二行
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
[root@Centos /]# ifconfig eth0|awk -F '[ :]+' 'NR==2 {print $4}' 打印第四列
192.168.1.2
方法三:
[root@Centos /]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:AA:CA:2B
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7271 errors:0 dropped:0 overruns:0 frame:0
TX packets:3244 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:733402 (716.2 KiB) TX bytes:473258 (462.1 KiB)
[root@Centos /]# ifconfig eth0|sed -n 2p 將第二行打印
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
[root@Centos /]# ifconfig eth0|sed -n 2p|sed 's#^.*addr:# #g'
192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
將以空格.*(前任意字符)addr:開(kāi)頭的內(nèi)容替換成空輸出
[root@Centos /]# ifconfig eth0|sed -n 2p|sed 's#^.*addr:# #g'|sed 's# Bcast.*$# #g' 將以兩空格Bcast.*(后任意字符)結(jié)尾的內(nèi)容替換成空輸出
192.168.1.2
方法四:
[root@Centos /]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:AA:CA:2B
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7723 errors:0 dropped:0 overruns:0 frame:0
TX packets:3434 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:776543 (758.3 KiB) TX bytes:493886 (482.3 KiB)
[root@Centos /]# ifconfig eth0|sed -n 's#^.*addr:\(.*\) Bcast.*$#\1#gp'
192.168.1.2
將需要的內(nèi)容匹配到()中,然后將()中的內(nèi)容打印出來(lái)
例二:將/目錄下etc目錄的權(quán)限轉(zhuǎn)換成數(shù)字輸出
方法一:
[root@Centos /]# stat /etc stat獲取文件或目錄的屬性信息
File: `/etc'
Size: 12288 Blocks: 24 IO Block: 4096 directory
Device: fd00h/64768d Inode: 2883585 Links: 116
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-08-21 11:07:01.802852859 +0800
Modify: 2016-08-21 11:06:44.569852839 +0800
Change: 2016-08-21 11:06:44.569852839 +0800
[root@Centos /]# stat /etc|sed -n 4p
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)打印第四行
[root@Centos /]# stat /etc|sed -n 4p|cut -d "(" -f2 以(為分隔符打印第二列
0755/drwxr-xr-x) Uid:
[root@Centos /]# stat /etc|sed -n 4p|cut -d "(" -f2|cut -d "/" -f1
0755 以/為分隔符打印第二列
方法二:
[root@Centos /]# stat /etc|sed -n 4p|cut -d "(" -f2|cut -c 2-4
755 以(分隔符取第二列,然后再取2-4個(gè)字符
方法三:
[root@Centos /]# stat /etc|sed -n 4p|awk -F '(' '{print $2}'|awk -F '/' '{print $1}'
0755 以(分隔符打印第二列|以/分隔符打印第一列
方法四:
[root@Centos /]# stat /etc|sed -n 4p 打印第四行
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
[root@Centos /]# stat /etc|sed -n 4p|awk -F '[(/]' '{print $2}' 指定多分隔符
0755
方法五:其實(shí)stat 命令本身就有參數(shù)可以直接獲取
[root@Centos /]# stat -c %a /etc
755
[root@Centos /]# stat -c %a /root
550
[root@Centos /]# stat -c %a /tmp
1777
關(guān)于怎樣看待Linux系統(tǒng)的正則表達(dá)式就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。