您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Shell腳本正則表達(dá)式中awk、sort、uniq怎么用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Shell腳本正則表達(dá)式中awk、sort、uniq怎么用”這篇文章吧。
在Linux/UNIX系統(tǒng)中,awk是一個(gè)功能強(qiáng)大的編輯工具,逐行讀取輸入文本,并根據(jù)指定的匹配模式進(jìn)行查找,對符合條件的內(nèi)容進(jìn)行格式化輸出或者過濾處理,可以再無交互的情況下實(shí)現(xiàn)相當(dāng)復(fù)雜的文本操作,被廣泛應(yīng)用于Shell腳本,完成各種自動化配置任務(wù)。
1.awk常見用法:
通常情況下 awk 所使用的命令格式如下所示,其中,單引號加上大括號“{}”用于設(shè)置對數(shù)據(jù)進(jìn)行的處理動作。awk 可以直接處理目標(biāo)文件,也可以通過“-f”讀取腳本對目標(biāo)文件進(jìn)行處理。
查出/etc/passwd的用戶名等列,執(zhí)行如下命令
[root@localhost ~]# awk -F ':' '{print $1,$3,$4}' /etc/passwd root 0 0 bin 1 1 daemon 2 2 //以下省略多行
FS:指定每行文本的字段分隔符,默認(rèn)為空格或制表位。 NF:當(dāng)前處理的行的字段個(gè)數(shù)。 NR:當(dāng)前處理的行的行號(序數(shù))。 $0:當(dāng)前處理的行的整行內(nèi)容。 $n:當(dāng)前處理行的第 n 個(gè)字段(第 n 列)。 FILENAME:被處理的文件名。 RS:數(shù)據(jù)記錄分隔,默認(rèn)為\n,即每行為一條記錄。
按行輸出文本:
[root@localhost ~]# awk 'NR==1,NR==3{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@localhost ~]# awk -F ":" 'NR==1,NR==3{print $1,$3}' /etc/passwd root 0 bin 1 daemon 2 [root@localhost ~]# awk -F ":" '(NR>=1)&&(NR<=3){print $1,$3}' /etc/passwd root 0 bin 1 daemon 2
奇數(shù)行: [root@localhost ~]# awk -F ":" 'NR%2==1{print $1,$3}' /etc/passwd root 0 daemon 2 lp 4 shutdown 6 mail 8 games 12 nobody 99 dbus 81 abrt 173 rpc 32 saslauth 996 pulse 171 rpcuser 29 ntp 38 usbmuxd 113 qemu 107 setroubleshoot 993 gdm 42 sshd 74 postfix 89 zhou 1000 named 25 偶數(shù)行: [root@localhost ~]# awk -F ":" 'NR%2==0{print $1,$3}' /etc/passwd bin 1 adm 3 sync 5 halt 7 operator 11 ftp 14 systemd-network 192 polkitd 999 libstoragemgmt 998 colord 997 rtkit 172 chrony 995 nfsnobody 65534 tss 59 geoclue 994 radvd 75 sssd 992 gnome-initial-setup 991 avahi 70 tcpdump 72 dhcpd 177
[root@localhost ~]# awk '/^root/{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk 'BEGIN {x=0} ; /\/bin\/bash$/{x++};END {print x}' /etc/passwd 2
[root@localhost opt]# vim name.txt zhangsan:lisi:wangwu zhaoliu:liuliu heiba:heihei [root@localhost opt]# awk 'BEGIN{RS=":"};END{print NR}' /opt/name.txt 5 //統(tǒng)計(jì)規(guī)則:遇到關(guān)鍵符號,折行
[root@localhost opt]# awk -F ":" '$3=="0"{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash [root@localhost opt]# awk -F ":" '$3=="0"{print $1,$7}' /etc/passwd root /bin/bash 輸出密碼為空的用戶的shadow記錄: [root@localhost opt]# awk 'BEGIN{FS=":"};$3=="0"{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash 輸出以冒號分隔且第7個(gè)字段包含bash: [root@localhost opt]# awk -F : '$7~"bash"{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash zhou:x:1000:1000:zhou:/home/zhou:/bin/bash 以冒號為分隔,輸出第一個(gè)字段包含nfs且總字段數(shù)為7的第1,3,7字段 方法一:[root@localhost opt]# awk -F : '($1~"nfs")&&(NF==7){print $1,$3,$7}' /etc/passwd nfsnobody 65534 /sbin/nologin 方法二:[root@localhost opt]# awk 'BEGIN{FS=":"};($1~"nfs")&&(NF==7){print $1,$3,$7}' /etc/passwd nfsnobody 65534 /sbin/nologin 以冒號為分隔,第七個(gè)字段不包含/sbin/nologin且總字段為7的,1,3,7字段 [root@localhost opt]# awk 'BEGIN{FS=":"};($7!="/sbin/nologin")&&(NF==7){print $1,$3,$7}' /etc/passwd root 0 /bin/bash sync 5 /bin/sync shutdown 6 /sbin/shutdown halt 7 /sbin/halt zhou 1000 /bin/bash named 25 /bin/false
[root@localhost opt]# awk -F : '/bash$/{print | "wc -l"}' /etc/passwd 2
[root@localhost opt]# awk 'BEGIN {while ("w" | getline) n++;{print n-2}}' 1
[root@localhost opt]# awk 'BEGIN {"hostname" | getline ; print $0}' localhost.localdomain
在 Linux 系統(tǒng)中,常用的文件排序工具有三種:sort、uniq、wc, 其中sort 是一個(gè)以行為單位對文件內(nèi)容進(jìn)行排序的工具,也可以根據(jù)不同的數(shù)據(jù)類型來排序。例如數(shù)據(jù)和字符的牌局就不一樣。sort 命令的語法為“sort [選項(xiàng)] 參數(shù)”,其中常用的選項(xiàng)包括以下幾種。
-f:忽略大小寫
-b:忽略每行前面的空格
-M:按照月份進(jìn)行排序
-n:按照數(shù)字進(jìn)行排序
-r:反向排序
-u:等同于 uniq,表示相同的數(shù)據(jù)僅顯示一行
-t:指定分隔符,默認(rèn)使用[Tab]鍵分隔
-o <輸出文件>:將排序后的結(jié)果轉(zhuǎn)存至指定文件
-k:指定排序區(qū)域
Uniq 工具在 Linux 系統(tǒng)中通常與 sort 命令結(jié)合使用,用于報(bào)告或者忽略文件中的重復(fù)行。具體的命令語法格式為:uniq [選項(xiàng)] 參數(shù)。其中常用選項(xiàng)包括以下幾種。
-c:進(jìn)行計(jì)數(shù)
-d:僅顯示重復(fù)行
-u:僅顯示出現(xiàn)一次的行
以上是“Shell腳本正則表達(dá)式中awk、sort、uniq怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。