91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-08 08:17:55 來源:網絡 閱讀:195 作者:wx5d8a17c45cb5b 欄目:系統運維

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

一、前言

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

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

二、awk工具

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

常見用法

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

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

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

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

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

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

? NF:當前處理的行的字段個數

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

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

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

? FILENAME:被處理的文件名

? RS:數據記錄分隔,默認為\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}'  //輸出奇數行內容
     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}' //輸出偶數行內容
     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
//統計以/bin/bash結尾的行的數量

3)按字段輸出文本

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

[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的用戶個數

三、sort工具和uniq工具

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

1.sort

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

? 使用格式:sort [選項] 參數

? 選項:

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

實例:

[root@lokott ~]# sort /etc/passwd |nl       //依據字母排序正向
     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   //依據字母排序反向
     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  //根據:號將第一列進行正向排序
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系統中通常與sort命令結合使用,用于報告或者忽略文件中的重復行。

格式:uniq [選項] 參數

選項:

-c:進行計數

-d:僅顯示重復行

-u:僅顯示出現一次的行

實例:

[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   //刪除互相連續的重復的行
this is a test

hello

world 

this is a test
list

hostname

[root@lokott ~]#uniq -c test.txt  //行前顯示該行重復出現的此次數
      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  //刪除連續重復的重復行
this is a test
hello

this is a test
list
hostname

四、小結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清苑县| 故城县| 札达县| 锦州市| 修文县| 长顺县| 射洪县| 新昌县| 西贡区| 赤水市| 西乌珠穆沁旗| 莆田市| 综艺| 永兴县| 称多县| 上饶县| 聂荣县| 柏乡县| 阿尔山市| 郑州市| 东明县| 兴仁县| 文山县| 织金县| 宜都市| 台山市| 成武县| 陆丰市| 休宁县| 晋城| 门源| 河北省| 广平县| 布尔津县| 尼勒克县| 徐闻县| 丰镇市| 易门县| 桐城市| 怀柔区| 德安县|