您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎樣看待Linux系統的正則表達式,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Linux系統正則表達式的介紹
學習Linux系統的朋友們肯定都會接觸到正則表達式,或者開發人員也會遇到這個東東,說起正則表達式,使我想起“會者不難,難者不會”這句話,的確如此,相信很多人剛接觸正則表達式,肯定一頭霧水,覺得很難學會,是的,民工哥也是這么個感覺,但是相信大家都認真去學習、去練習,肯定能學會的。
那么今天就來聊一聊正則表達式
何謂正則表達式呢?網上一堆的名詞介紹,大家可以自己查找,民工哥的理解是:首先它是一種文本模式,然后它的作用就處理字符串的一種方法
給定一個正則表達式和另一個字符串,我們可以達到如下的目的
1. 給定的字符串是否符合正則表達式的過濾邏輯(稱作“匹配”)
2. 可以通過正則表達式,從字符串中獲取我們想要的特定部分
正則表達式的特點是:
1. 靈活性、邏輯性和功能性非常的強
2. 可以迅速地用極簡單的方式達到字符串的復雜控制
3. 對于剛接觸的人來說,比較難懂
因些我們也是有必要了解下正則需要用到的字符含義
\ 轉義符,就是將特殊符號的意義去除掉
.任意一個字符
* 重復零個或者多個*前的一個字符
\{n,m\連續n到m個前一個重復字符
[ ]字符集合
.*匹配所有字符
^匹配以以某字符開頭
$匹配以以某字符結尾
[^]取反
^.*匹配多個任意字符開頭
|或
[A-Z] 26個大寫字母
[a-z] 26個小寫字母
[0-9] 0至9數字
[A-Za-z0-9] 26個大寫字母、26個小寫字母和0至9數字
\d匹配一個數字字符
\w匹配包括下劃線的任意單詞字符
grep 文本搜索工具
grep 參數 查找條件 文件名
主要參數:
-c:只輸出匹配行的計數
-I:不區分大 小寫(只適用于單字符
-l:查詢多文件時只輸出包含匹配字符的文件名
-n:顯示匹配行及 行號
-s:不顯示不存在或無匹配文本的錯誤信息
-v:顯示不包含匹配文本的所有行
sed 在線編輯工具
[root@Centos bbs]# man sed
NAME
sed - stream editor for filtering and transforming text
用于過濾或轉換文本的流編輯器
sed 參數 動作
主要參數:
-n:取消默認輸出
-i:修改文件內容
動作:
p 打印
d 刪除
s#x#xx#g 替換與全局替換 將X全局替換掉XX
awk 文本處理工具
[root@Centos /]# man awk
NAME
gawk - pattern scanning and processing language
awk '條件1 {動作1} 條件2{動作2}........' 文件名
-F 使用分隔符
==等于
NR 取行
grep、sed、awk的參數非常的多,大家有興趣可以慢慢研究,查看幫助文檔
舉例說明
例一:將系統用ifconfig命令列出的信息中eth0的IP地址打印出來
也就是說用命令將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地址行過濾打印出來,然后再進行過濾取出IP地址
[root@Centos /]# ifconfig eth0 |grep "inet addr"|awk -F '[ :]+' '{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: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 取整個內容第二行
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:開頭的內容替換成空輸出
[root@Centos /]# ifconfig eth0|sed -n 2p|sed 's#^.*addr:# #g'|sed 's# Bcast.*$# #g' 將以兩空格Bcast.*(后任意字符)結尾的內容替換成空輸出
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
將需要的內容匹配到()中,然后將()中的內容打印出來
例二:將/目錄下etc目錄的權限轉換成數字輸出
方法一:
[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個字符
方法三:
[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
方法五:其實stat 命令本身就有參數可以直接獲取
[root@Centos /]# stat -c %a /etc
755
[root@Centos /]# stat -c %a /root
550
[root@Centos /]# stat -c %a /tmp
1777
關于怎樣看待Linux系統的正則表達式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。