當前位置:成語大全網 - 書法字典 - 殼的基本應用(5)

殼的基本應用(5)

首先,正則表達式

匹配數字、字母和下劃線。

egrep“roow”用戶//在roo後查找包含數字、字母和下劃線的字符串。

s匹配空格、tab鍵

egrep“roos“user//查找roo後跟1個空格或由tab鍵鍵入的空格(如果沒有空格)的字符串。

不要輸出

第二,sed其他說明

通過在a行中添加I來添加C以替換整行。

sed‘a 666‘用戶//在所有行下方添加666。

sed‘1a 666‘用戶//在1行下方添加666。

sed‘/bin/a 666‘用戶//在以bin開頭的行下方添加666。

sed‘I 666‘用戶//在所有行上方添加666。

sed‘5i 666‘用戶//在第五行上方添加666。

sed‘$ I 666‘用戶//在最後壹行1之上添加666。

sed‘c 666‘用戶//所有線路都替換為666。

sed‘1c 666‘用戶//替換了1行為666。

-

三,awk

可以實現精確的搜索和輸出,逐行處理。

1,前置指令| awk選項條件指令

2.awk選項條件指令是已處理的文檔

選項-F定義了分隔符。

說明書印刷

條件/字符串/

內置變量$1第壹列$2第二列$3第三列...

$0所有列NR行號NF列號

【root @ proxy opt】# cat ABC . txt//準備材料。

妳好世界

歡迎來到北京

awk“{ print }”ABC . txt//全部輸出

awk“/to/{ print }”ABC . txt//輸出帶有to的行。

awk“{ print $ 2 }”ABC . txt//輸出所有行的第二列。

要輸出的行的awk“/to/{ print $ 1 }”abc.txt//Column 1。

awk“{ print $ 0 }”ABC . txt//輸出所有行和所有列。

awk“{ print $ 0,$ 1 }”abc.txt//Output所有行、所有列和1列。

awk“{ print NR }”ABC . txt//輸出所有行的行號。

awk“{ print NR,$ 0 }”ABC . txt//輸出所有行和所有列的行號。

awk“{ print NR,NF }”ABC . txt//輸出所有行的行號和列號(有幾列)。

awk“/bin/{ printnr }”用戶//找到以bin開頭的行並顯示該行的行號。

awk“/bin/{ print NR,$0}”用戶//找到以bin開頭的行並顯示

行號,所有列

awk“{ print NF }”用戶//輸出所有行的列號(每行有多少列)。

awk-F:“{ print $ 1 }”用戶//如果文檔中沒有空格,可以使用F修改分數。

分離器

awk-f:“{ print $ 1,$6}”用戶//使用冒號作為要顯示的列的分隔符。

列1和6

awk-f:“{ print $ 1”的主目錄是“$6}”用戶//。您還可以輸出常數,加上

雙引號也可以

awk-f:“{ print $ 1”的解釋器是“$7}”用戶。

收集根分區的剩余容量

Df -h | awk‘/$/{ print $ 4 }‘//使用DF-H作為前置指令並將其交給awk進行處理。

找到以/結尾的行並輸出第四列。

df-h | awk‘/$/{ print“根分區的剩余容量為“$ 4 }‘//然後添加壹個常量輸出。

收集網卡流量信息

ifconfig eth 0 | awk‘/rx p/{ print“eth 0網卡接收的數量為“$5}”。

ifconfig eth 0 | awk‘/TXP/{ print“eth 0網卡發送的數量為“$5}”。

-

四、awk的條件

1,/string/妳也可以用正則~包含!~不包含

awk-F:“$ 6 ~/root/{ print }”用戶//輸出第六列中包含root的行。

awk-F:“$ 6 ~/bin/{ print }”用戶//輸出第六列為bin的行。

awk-F:‘$ 6!~/bin/{ print }‘用戶//輸出第六列中沒有bin的行。

2.使用數字或字符串

== != & gt& gt= & lt& lt=

awk-F:“$ 3 & lt;3 { print }‘用戶//輸出第三列小於3的行。

awk-F:“$ 3 & lt;= 3 { print }‘用戶//輸出第三列小於或等於3的行。

awk-F:‘NR = = 2 { print }‘用戶//輸出行2。

awk-F:‘NR & gt;2 { print }‘用戶//輸出行數大於2的行。

3、邏輯組合&;& amp還有||或者

awk-f:‘NR = = 2 | | NR = = 4 { print }‘user//找到行號為2或4的行。

awk-f:‘NR = = 2 | | NR = = 40 { print }‘user//如果只滿足壹個條件,將顯示壹個。

awk-F:‘$ 7 ~/bash/& amp;& amp$ 3 & lt= 500 { print }‘user//找到包含bash的第7列和第3列。

小於或等於500的行數

awk‘NR = = 2 & amp;& ampNR = = 4 { print }‘user//找到行號為2和4的行,該行不存在且沒有輸出。

awk-F:‘$ 7 ~/bash/& amp;& ampNR & lt= 3 { print }‘user//找到第7列包含bash且行號為1~3的那個。

awk-F:‘$ 7 ~/bash/| | NR & lt;= 3 { print }‘user//找到第7列包含bash或行號為1~3的那個。

awk-F:“$ 1 ~/root/”用戶//在列1中查找包含root的行。

如果有壹個名為root6的用戶,您還會發現壹種更寬松的搜索方法,如果

如果任務是{打印},您可以省略它。

awk-F:“$ 1 = =“root““user//在列1中查找完全等於root的行。

多壹個字符少壹個字符都不行。這是壹種嚴格的搜索方法。

4、操作

awk‘NR % 2 = = 0 { print NR,$ 0 }‘用戶//在條件中使用操作。

,通過將行號除以2找到余數等於0的行,然後輸出

行號和所有列,相當於輸出偶數行。

-

第五,awk處理機會,可以執行附加任務

在讀取文檔之前,BEGIN任務執行了1次。

逐行任務執行n次,在讀取文檔時執行。

結束任務執行了1次,並且是在閱讀文檔後執行的。

開始{任務1 }{任務2 }結束{任務3}

awk-F:‘BEGIN { print“ok“} { print $ 1 } END { print“ok“}‘用戶

awk“開始{打印編號} {打印編號}結束{打印編號}用戶

利用awk處理機會輸出以下內容

awk‘begin { print“user uid home“}‘//在步驟1中輸出標頭信息。

awk-f:“{ print $ 1““$ 3““$ 6 }“用戶//在步驟2中輸出。

awk“END { print“Total“NR“line“}“用戶//第3步輸出結束。

awk-f:‘begin { print“用戶uid home“} { print $ 1““$ 3““$ 6 } end { print“total“NR“lines“}‘用戶//寫在壹起。

-

使用awk統計網站訪問量

Setenforce 0 //關閉selinux

Systemctl停止防火墻d //關閉防火墻。

Systemctl重新啟動httpd //啟動網站服務。

使用瀏覽器多次訪問該網站,包括本機的curl。

curl 192.5438+068 . 4 . 7:82//如果端口沒有更改,請不要敲門。

awk“{ print $ 1 }‘/var/log/httpd/access _ log//初步統計,並不完美。

第六,使用awk數組+for循環實現高級搜索

數組相當於壹個可以存儲多個值的特殊變量。

數組名【下標】=對應於下標的值。

awk‘BEGIN { a【1】= 10;a【2】= 20;print a【2】,a【1】}‘//使用awk測試數組。首先,

創建數組A,下標1對應的值是10,下標2對應的值是20,然後輸出下標2和。

下標是1的值。

awk‘BEGIN { a【“ABC“】=“ABC ABC“;a【“XYZ“】=“xyzxyz“;打印數組的【“XYZ“】}‘//下標

兩個值都可以是非數字,測試時只需加上雙引號即可。

上述信息是手動輸入的,但通常是從文檔中收集的。

準備壹份6行的文件,每行是abc、xyz、abc、opq、xyz、abc然後。

根據awk逐行處理的工作特點,使用awk‘{ a【$ 1】+}‘Shu . txt完成每壹行,得到以下結果。

但不輸出到屏幕上。

a【$ 1】++ a【ABC】++ a【ABC】= 1

a【$ 1】++ a【XYZ】++ a【XYZ】= 1

a【$ 1】++ a【ABC】++ a【ABC】= 2

a【$ 1】++ a【opq】++ a【opq】= 1

a【$ 1】++ a【XYZ】++ a【XYZ】= 2

a【$ 1】++ a【ABC】++ a【ABC】= 3

如果要輸出到屏幕上,可以使用命令awk“{ a【$ 1】++ } end { print a【ABC】}‘Shu . txt。

-

根據上面的操作,我們知道array可以收集信息,但收集後不方便查看,因此可以通過for循環來實現。該方法如下:

For(數組名中的變量名){打印變量名}//此格式可以查看數組的所有下標。

awk“{ a【$ 1】+} End { for(ii in a){ print I,a【I】}”shu.txt//Use漸進式任務和數組。

收集文檔shu.txt中的信息,然後使用for循環在最終任務中顯示所有信息。

數組a的下標和值

awk“{ IP【$ 1】++ } END { for(I in IP){ print I,IP【I】} }‘/var/log/httpd/AC

Cess_log //只需將上面的文件替換為網站的日誌。

最後,它用於檢查日誌以獲得哪個ip可以訪問以及訪問次數。

awk“{ IP【$ 1】++ } END { for(I in IP){ print I,IP【I】} }‘/var/log/httpd/AC

Cess_log | sort -nr -k 2 //使用sort命令增加排序。

函數中,-n按數字排序,-r按降序排序,-k指定為。

哪壹列已排序?

-

/var/log/secure是壹個安全日誌,如果有人在登錄時輸入錯誤的密碼。

信息將被記錄,awk可以通過以下方式捕獲這些信息:

awk“/root/{ IP【$ 11】++ } END { for(I in IP){ print I,IP【I】} }的密碼失敗

/var/log/secure //在統計安全日誌中訪問root帳戶的密碼輸入不正確。

Ip地址和時間。

-

編寫腳本查看系統的各種參數信息。

#!/bin/bash

同時:

清楚的

free-h | awk‘/mem:/{ print“剩余內存容量為“$4}”。

DF-H | awk‘/$/{ print“根分區的剩余容量為“$4}”。

awk‘END { print“用戶的總數是“NR““}‘/etc/passwd。

who | awk‘END { print“登錄用戶數為“NR”和“}”。

uptime | awk“{ print”cpu在15分鐘內CPU的平均負載為“$NF}”。

rpm-QA | awk“END { print“安裝的軟件包數量為“NR“件“}“。

睡眠3

完成的