溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎樣看待Linux系統(tǒng)的正則表達(dá)式

發(fā)布時(shí)間:2021-10-22 09:12:50 來(lái)源:億速云 閱讀:140 作者:柒染 欄目:云計(jì)算

這篇文章給大家介紹怎樣看待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)

怎樣看待Linux系統(tǒng)的正則表達(dá)式
也就是說(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ò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI