匹配數字、字母和下劃線。
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
完成的