真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

shell腳本編程之正則表達式(三)(awk、sort、uniq工具)

shell腳本編程之正則表達式(三)

一、前言

? 前面兩篇文章主要介紹了正則表達式的概念與作用,對基礎正則表達式及擴展正則表達式進行概念敘述;同時介紹了shell“三劍客”中的grep與sed兩個命令,本文將介紹最后一個劍客——awk。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、網站空間、營銷軟件、網站建設、荔浦網站維護、網站推廣。

? 同時,我們還將介紹sort工具以及uniq工具。

二、awk工具

? 在Linux/Unix系統(tǒng)中,awk是一個強大的編輯工具,逐行讀取輸入文本,并且根據(jù)指定的匹配模式進行查找,對符合條件的內容進行格式化輸出或者過濾處理,可以在無交互的情況下實現(xiàn)相當復雜的文本操作,被廣泛應用于 Shell 腳本,完成各種自動化配置任務。

常見用法

? awk 選項 ’模式或條件 {編輯指令} ‘ 文件1 文件2

? awk -f 腳本文件 文件1 文件2

? sed命令常用于一整行的處理,awk則是將一行分為多個字段后再處理,而默認情況下字段的分隔符為空格或者TAB鍵。

? awk 執(zhí)行結果可以通過 print 的功能將字段數(shù)據(jù)打印顯示。在使用 awk 命令的過程中,可以使用邏輯操作符“&&”,表示“與”, “||”表示“或”,“!”表示“非”;還可以進行簡單的數(shù)學運算,如+、-、*、/、%、^分別 表示加、減、乘、除、取余和乘方。

? awk包含幾個特殊的內建變量(無法修改但可以直接使用)

? FS:指定每行文本的字段分隔符,默認為空格或者制表位(TAB)

? NF:當前處理的行的字段個數(shù)

? NR:當前處理的行的行號(序數(shù))

? $0:當前處理的行的內容

? $n:當前處理行的第n個字段(第n列)

? FILENAME:被處理的文件名

? RS:數(shù)據(jù)記錄分隔,默認為\n 即每行為一條記錄

實例講述:

1)查找出/etc/passwd文件中的用戶名、用戶ID、組ID列

[root@lokott ~]# awk -F: '{print $1,$3,$4}' /etc/passwd
root 0 0
bin 1 1
daemon 2 2
...//省略部分內容
[root@lokott ~]# awk -F: '{print $0}' /etc/passwd  //$0表示顯示整個行,結果與cat 和sed -n 'p'等價
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
......//省略部分內容

2)按行輸出文本

[root@lokott ~]# awk '{print}' /etc/passwd   //等同于 awk '{print $0}' /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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@lokott ~]# awk 'NR==1,NR==3{print}' /etc/passwd   //輸出1-3的行內容,與下等同
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@lokott ~]# 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@lokott ~]# awk '(NR==1)||(NR==3){print}' /etc/passwd  //輸出第1和3行的內容
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@lokott ~]# nl /etc/passwd |awk 'NR%2==1{print}'  //輸出奇數(shù)行內容
     1  root:x:0:0:root:/root:/bin/bash
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    ......//省略部分內容
[root@lokott ~]# nl /etc/passwd |awk 'NR%2==0{print}' //輸出偶數(shù)行內容
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     8  halt:x:7:0:halt:/sbin:/sbin/halt

[root@lokott ~]# awk '/^root/{print}' /etc/passwd  //輸出以root開頭的行
root:x:0:0:root:/root:/bin/bash
[root@lokott ~]# awk '/bash$/{print}' /etc/passwd   //輸出以bash結尾的行
root:x:0:0:root:/root:/bin/bash
lokott:x:1000:1000:lokott:/home/lokott:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash

[root@lokott ~]# awk 'BEGIN{x=0};/\/bin\/bash$/ {x++};END {print x}' /etc/passwd
3
[root@lokott ~]# grep -c "/bin/bash$" /etc/passwd
3
//統(tǒng)計以/bin/bash結尾的行的數(shù)量

3)按字段輸出文本

[root@lokott ~]# sed 's/:/ /g' /etc/passwd|awk '{print $1,$3}'|tail -3
named 25
apache 48
lisi 1002
//將passwd文件中的所有:替換為空格后的內容到緩存中,然后使用awk命令輸出每行的第一和第三個字段到管道中,最后輸出最后三行到顯示屏上,也可以在后面繼續(xù)添加“|sort”繼續(xù)排序

[root@lokott ~]# awk -F: '$2=="!!"{print}' /etc/shadow |tail -3
tcpdump:!!:18214::::::
named:!!:18220::::::
apache:!!:18228::::::
//輸出密碼為?。。]有密碼的)的用戶的shadow記錄
[root@lokott ~]# awk -F: '$7~"/bash"{print $1}' /etc/passwd//輸出第七個字段中包含/bash的行的第一個字段
root
lokott
lisi
[root@lokott ~]# awk '($1~"nfs")&&(NF==8){print $1,$2}' /etc/services 
nfs 2049/tcp                            //輸出包含8個字段且第一個字段包含nfs的行的第1、2個字段
nfs 2049/udp
nfs 2049/sctp
netconfsoaphttp 832/tcp
netconfsoaphttp 832/udp
netconfsoapbeep 833/tcp
netconfsoapbeep 833/udp

4)通過管道、雙引號調用shell命令

[root@lokott ~]# awk '/bash$/{print |"wc -l"}' /etc/passwd
3
//輸出使用bash的用戶個數(shù)

三、sort工具和uniq工具

? 在Linux系統(tǒng)中,常用的文件排序工具有三種:sort、uniq、wc。wc在linux命令章節(jié)中講解了,一般用于統(tǒng)計,因此這里不再贅述。主要講解sort和uniq工具的用途和使用方法。

1.sort

? sort是一個以行為單位對文件內容進行排序的工具,也可以根據(jù)不同的數(shù)據(jù)類型來排序。

? 使用格式:sort [選項] 參數(shù)

? 選項:

  • -f:忽略大小寫;
  • -b:忽略每行前面的空格;
  • -M:按照月份進行排序;
  • -n:按照數(shù)字進行排序;
  • -r:反向排序;(常用)
  • -u:等同于 uniq,表示相同的數(shù)據(jù)僅顯示一行;
  • -t:指定分隔符,默認使用[Tab]鍵分隔;
  • -o <輸出文件>:將排序后的結果轉存至指定文件;(常用)
  • -k:指定排序區(qū)域。

實例:

[root@lokott ~]# sort /etc/passwd |nl       //依據(jù)字母排序正向
     1  abrt:x:173:173::/etc/abrt:/sbin/nologin
     2  adm:x:3:4:adm:/var/adm:/sbin/nologin
     3  apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
     4  avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
     5  bin:x:1:1:bin:/bin:/sbin/nologin
     ......//省略部分內容
[root@lokott ~]# sort -r /etc/passwd |nl   //依據(jù)字母排序反向
     1  usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
     2  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
     3  tcpdump:x:72:72::/:/sbin/nologin
     4  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
     5  sync:x:5:0:sync:/sbin:/bin/sync
     ......//省略部分內容
[root@lokott ~]# sort -t: -k 1 /etc/passwd  //根據(jù):號將第一列進行正向排序
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:995:991::/var/lib/chrony:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
......//省略部分內容

[root@lokott ~]# sort -t: -k 1 /etc/passwd -o out.txt  //將上述結果輸入到文件out.txt中
[root@lokott ~]# cat out.txt 
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
......//省略部分內容

2.uniq

uniq工具在Linux系統(tǒng)中通常與sort命令結合使用,用于報告或者忽略文件中的重復行。

格式:uniq [選項] 參數(shù)

選項:

-c:進行計數(shù)

-d:僅顯示重復行

-u:僅顯示出現(xiàn)一次的行

實例:

[root@lokott ~]# cat test.txt  //有空行
this is a test
this is a test
this is a test

hello
hello

world 

this is a test
this is a test
list
list

hostname
hostname

[root@lokott ~]# uniq test.txt   //刪除互相連續(xù)的重復的行
this is a test

hello

world 

this is a test
list

hostname

[root@lokott ~]#uniq -c test.txt  //行前顯示該行重復出現(xiàn)的此次數(shù)
      3 this is a test
      1 
      2 hello
      1 
      1 world 
      2 
      2 this is a test
      2 list
      1 
      2 hostname
      1 
[root@lokott ~]# uniq -d test.txt  //刪除連續(xù)重復的重復行
this is a test
hello

this is a test
list
hostname

四、小結

? 本文主要講解的是awk、sort以及uniq工具的用途以及使用方法,結合實例來解釋。


本文題目:shell腳本編程之正則表達式(三)(awk、sort、uniq工具)
當前地址:http://weahome.cn/article/psjsdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部