十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
一、awk的正則表達(dá)式
1.正則表達(dá)式常見的用法
[A-Z]一個(gè)大寫字母
[a-z]一個(gè)小寫字母
[0-9]一個(gè)數(shù)字
[^A-Z]除了大寫字母之外的一個(gè)字符
[^a-zA-Z]一個(gè)非英文字母的字符
[^a-zA-Z0-9]一個(gè)非英文字母、且非數(shù)字的字符
[a-z]\{3,5\}代表以小寫字母組成的字符串,長度是3~5
2.查看tcp端口狀態(tài)
[root@localhost ~]# netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:817 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN
tcp 0 0 :::5989 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
3.截取端口信息
[root@localhost ~]# netstat -ltn |awk '{print $4}' |awk -F: '/[0-9]$/ {print $NF}'
2208
111
817
631
25
2207
5989
22
4.打印匹配mysql或者oracle的數(shù)據(jù)
[root@localhost ~]# awk '$0~/mysql|oracle/{print $0}' /etc/passwd
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
oracle:x:500:501::/home/oracle:/bin/bash
5.打印匹配m或o或r開始的數(shù)據(jù)
[root@localhost ~]# awk '$0~/^[mor]/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
oracle:x:500:501::/home/oracle:/bin/bash
6.打印非字母的數(shù)據(jù)
[root@localhost ~]# awk '{if($0~/^[^a-zA-Z]/) print $0}' /etc/passwd
二、awk變量、判斷和循環(huán)的簡單用法
1,定義變量a="name is:",打印變量a和第一列
[root@localhost ~]# awk -F: '{a="name is:"} /root/ {print a,$1}' /etc/passwd
name is: root
name is: operator
2.begin定義變量,定義變量aa=0,匹配root就加1,完成之后再打印命令aa
[root@localhost ~]# awk 'BEGIN{aa=0} /root/ {aa++} END{print aa}' /etc/passwd
2
3.if判斷
[root@localhost ~]# awk -F: '{if($7!~"nologin") print $1,$7;else print NR,$NF}' /etc/passwd
root /bin/bash
2 /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
9 /sbin/nologin
32 /sbin/nologin
mysql /bin/bash
oracle /bin/bash
...
4.循環(huán)
if查看有兩行
[root@localhost ~]# awk '{if($0~/root/) print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
while只查詢一行就退出
[root@localhost ~]# awk '{while ($0~/root/) {print $0;exit}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
三、&&和||
[root@localhost shell]#tail -3 /etc/passwd |awk -F: '{if($0 ~ "27" && $0 ~ "bash") print $0 }'
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
[root@localhost shell]# tail -3 /etc/passwd |awk -F: '{if($0 ~ "mysql" || $0 ~ "oracle") print $0 }'
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
oracle:x:500:501::/home/oracle:/bin/bash
四、awk內(nèi)置變量
RS:行分隔符
FS:列分隔符
OFS:定義列分隔符
ORS:定義行分隔符,默認(rèn)是\n轉(zhuǎn)行
FILENAME:文件名
FNR:當(dāng)awk處理多個(gè)文件時(shí),awk NR變量會給出針對所有文件的當(dāng)前記錄號(行號),Awk FNR 會顯示每個(gè)文件的當(dāng)前行號。
RS記錄行分隔符,默認(rèn)的分隔符是\n。
[root@localhost ~]# echo "1---2---3" |awk 'BEGIN{RS="---"}{print}'
1
2
3
ORS記錄輸出分隔符,默認(rèn)值是\n。ORS可以看成RS的逆向過程。
[root@localhost ~]# seq 3 |awk 'ORS=NR%3?"---":"\n"{print}'
1---2---3
[root@localhost ~]# seq 3 |awk '{ORS="---";print}';echo
1---2---3---
把---替換成***,FS和OFS互相替換
[root@localhost ~]# echo "1---2---3" |awk -F--- 'BEGIN {OFS="***"}{print $1,$2,$3}'
1***2***3
FILENAME的用法
[root@localhost shell]#awk 'BEGIN {FS=":"} {print NF,NR,$NF,$0}END{print "====================================================\n" FILENAME}' /etc/passwd
1 1 root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash
1 2 bin:x:1:1:bin:/bin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin
1 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
1 4 adm:x:3:4:adm:/var/adm:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
....
1 40 oracle:x:500:501::/home/oracle:/bin/bash oracle:x:500:501::/home/oracle:/bin/bash
====================================================
/etc/passwd
五、awk內(nèi)置的字符串函數(shù)
1.gsub(r,s)在整個(gè)$0中用s替換r
[root@localhost ~]# awk 'gsub ("root","bob"){print $0}' /etc/passwd
bob:x:0:0:bob:/bob:/bin/bash
operator:x:11:0:operator:/bob:/sbin/nologin
效果等同于sed的全局替換
[root@localhost ~]# sed -n 's/root/bob/gp' /etc/passwd
bob:x:0:0:bob:/bob:/bin/bash
operator:x:11:0:operator:/bob:/sbin/nologin
gsub(r,s,t)在整個(gè)t中用s替換r
[root@localhost ~]# awk 'gsub ("root","bob",$2){print $0}' sedtest.txt
root bob root
root bob root
2.sub(r,s)用$0中最左邊最長的子串代替s
[root@localhost ~]# awk 'sub ("root","bob"){print $0}' /etc/passwd
bob:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/bob:/sbin/nologin
效果等同于sed局部替換
[root@localhost ~]# sed -n 's/root/bob/p' /etc/passwd
bob:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/bob:/sbin/nologin
3.index(s,t)返回s中字符串t的位置
[root@localhost ~]# awk 'BEGIN{print index("I love you","ov")}'
4
4.length(s)返回s長度
[root@localhost ~]# awk 'BEGIN{print length("I love you")}'
10
5.match(s,r)測試s是否包含匹配r的字符串
[root@localhost ~]# awk 'BEGIN{print match("I love you","v")}'
5
[root@localhost ~]# awk 'BEGIN{print match("I love you","a")}'
0
6.split(s,a,fs)在fs上將s分成序列a
7.substr(s,p)返回字符串s中從p開始的后綴部分
8.substr(s,p,n)返回字符串s中從p開始長度為n的后綴部分
六、awk內(nèi)置數(shù)學(xué)函數(shù)
int(x)
sqrt(x)
exp(x)
log(x)
sin(x)
cos(x)
等
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。