文本處理經常使用命令grep cut awk sed:css
date時間java
[dispatcher@ip-172-31-14-16 log]$ date +%T 16:20:51 [dispatcher@ip-172-31-14-16 log]$ date +%Y:%T 2019:16:20:57 [dispatcher@ip-172-31-14-16 log]$ date -d "-10min" +%T 16:11:11 [dispatcher@ip-172-31-14-16 log]$ date -d "-1day" +%Y:%m:%d 2019:06:12 [dispatcher@ip-172-31-14-16 log]$ date -d "-1day" +%Y:%m:%d:%H:%M:%S 2019:06:12:16:21:31 [dispatcher@ip-172-31-14-16 log]$ date -d "-5 minute" +%H:%M:%S 16:18:47 [dispatcher@ip-172-31-14-16 log]$ date -d "-5min" +%H:%M:%S 16:18:55
cat 查看文件內容:linux
-b 顯示行號,空白行不顯示行號nginx
-n 顯示行號,包括空白行bash
more 分頁查看文件內容,經過空格鍵查看下一頁,q鍵則退出查看服務器
less 分頁查看文件內容,空格(下一頁),方向鍵(上下回鍵),q鍵(退出查看)less
head 查看文件頭部內容,默認顯示前10行:tcp
-c nK 顯示文件前nKB的內容測試
-c n 顯示內容前n個字節ui
-n 顯示文件前n行的內容
head -c 2K /root/install.log 查看文件前2KB的內容
head -20 /root/install.log 查看文件前20行的內容
tail 查看文件的尾部內容,默認顯示末尾10行:
-c nK 顯示文件末尾nKB的內容
-n 顯示文件末尾n行的內容
-f 動態顯示文件內容,按Ctrl+C組合鍵退出
tail -c 2K /root/install.log 查看文件末尾2KB的內容
tail -20 /root/install 查看文件末尾20行的內容
tail -f /var/log/messages 實時查看文件內容
wc 顯示文件的行、單詞與字節的統計信息:
-c 顯示文件字節統計信息
-l 顯示文件行數統計信息
-w 顯示文件單詞統計信息
sort 對文件內容進行排序
語法:
sort [-bcdfimMnr][-o<輸出文件>][-t<分隔字符>][+<起始欄位>-<結束欄位>][--help][--verison][文件]
-b:忽略每行前面開始的空格字符,空格數量不固定時,該選項幾乎是必需要使用的("-n"選項隱含該選項,測試發現都隱含) |
grep:
-i 是忽略大小寫 --color 是加顏色
-n 是輸出行號 (同 cat -n)
-ra 深度查找匹配
-E 是grep 的 擴展
^ 是以什麼開始
$ 是以什麼結尾
egrep至關於 grep -E
-v 是反選
grep Aug /var/log/messages 在文件 ‘/var/log/messages’中查找關鍵詞」Aug」
grep ^Aug /var/log/messages 在文件 ‘/var/log/messages’中查找以」Aug」開始的詞彙
grep --color "[0-9]" /var/log/messages 選擇 ‘/var/log/messages’ 文件中全部包含數字的行
grep --color "[0-9][0-9][0-9]" /var/log/messages 選擇 ‘/var/log/messages’ 文件中全部的數字連續匹配3次
grep -E --color "[0-9]{4}" /var/log/messages 選擇 ‘/var/log/messages’ 文件中全部數字的行能連續匹配4次
grep -E --color "[0-9]{1,3}" /var/log/messages 選擇 ‘/var/log/messages’ 文件中全部數字的行能連續匹配1到3次
grep --color "[a-z]" /var/log/messages
grep --color "[A-Z]" /var/log/messages
grep --color "[Aa-Zz]" /var/log/messages
grep Aug -R /var/log/* 在目錄 ‘/var/log’ 及隨後的目錄中搜索字符串」Aug」
grep -i --color "com" test.txt 在test.txt文件裏忽略大小寫搜索「com」並顏色顯示
grep -i -n --color "com" test.txt 在test.txt文件裏忽略大小寫搜索「com」,顯示所在行號並顏色顯示
egrep -n --color "[0-9]" /etc/passwd 顯示/etc/passwd裏全部內容的行號
grep -v "root" /etc/passwd 顯示文件中root以外的全部內容(反選)
grep -v "^$" test.txt 去掉文件裏的空行
grep -v "^#" test.txt 去掉文件裏的註釋行
sed:
選項與參數:
-n :使用安靜(silent)模式,加上 -n 參數後,則只有通過sed 特殊處理的那一行(或者動做)纔會被列出來,但不會真正去修改原文件。
-e :直接在命令列模式上進行 sed 的動做編輯;
-f :直接將 sed 的動做寫在一個文件內, -f filename 則能夠運行 filename 內的 sed 動做;
-r :sed 的動做支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法)
-i :直接修改讀取的文件內容,而不是輸出到終端。
function:
a :新增行, a 的後面能夠是字串,而這些字串會在新的一行出現(目前的下一行)
c :取代行, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行
d :刪除行,由於是刪除,因此 d 後面一般不接任何參數,直接刪除地址表示的行;
i :插入行, i 的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行);
p :打印,亦即將某個選擇的數據印出。一般 p 會與參數 sed -n 一塊兒運行
s :替換,能夠直接進行替換的工做,一般這個 s 的動做能夠搭配正規表示法,例如 1,20s/old/new/g 通常是替換符合條件的字符串而不是整行
^ 匹配行開始,如:/^sed/匹配全部以sed開頭的行。 $ 匹配行結束,如:/sed$/匹配全部以sed結尾的行。 $= 匹配結尾的行數,如 sed -n "$=" /var/log/messsage. . 匹配一個非換行符的任意字符,如:/s.d/匹配s後接一個任意字符,最後是d。 * 匹配0個或多個字符,如:/*sed/匹配全部模板是一個或多個空格後緊跟sed的行。 sed -i '/192.168.1.115/d' awk.text 直接刪除文件內的192.168.1.115
sed -i 's/192.168.1.115/192.168.1.114/g' awk.text 直接修改文件內的192.168.1.115爲114
sed -i 's/serername/servername:/g' awk.text
sed -i '3s/serername/servername:/g' awk.text 修改文件種第3行(修改第幾行在s前面加上修改的行數,不加默認全局)
sed -i '/server/s/serername/servername:/g' awk.text 先找到那一行的關鍵詞,而後再修改
sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/sysconfig/selinux 修改selinux文件永久關閉,^號是以什麼爲開頭
sed -i '$s/server name:192.168.1.1/192.168.12/g' awk.text $號 表明結尾,修改最後一行
sed -i ‘s/stringa1/stringa2/g’ example.txt 將example.txt文件中的 「string1」 替換成 「string2」
sed -n ‘/stringa1/p’ 查看只包含詞彙 「string1」的行(grep stringa1)
sed -n ‘1,5p;5q’ example.txt 查看從第一行到第5行內容
sed -n ‘5p;5q’ example.txt 查看第5行
sed -i ‘/^$/d’ example.txt 從example.txt 文件中刪除全部空白行
sed -n '1p' awk.text 打印第一行
sed -n '2p' awk.text 打印第二行
sed -i '/^#/d' example.txt|sed -i '/^$/d' 從example.txt文件中刪除全部註釋和空白行
df -h |sed -n '/\/$/p'|sed 's/2%/20/g' 打印磁盤分區信息
cat awk.text |sort|sed 's/ /\n/g'|sort -nr |sed -n '1p;$p' sort -nr 是從小到大的順序排序 反之-n \n 是換行的意思
sed -n "/`(date -d "-10min" +%Y:%T)`/,/`(date +%Y:%T)`/p" /usr/local/nginx/logs/access.log 分析前十分鐘的日誌
sed -n ‘/2015:12:00:*/,/2015:12:30:*/’p /data/log/nginx.log|awk ‘{print $1}’|sort|uniq –c|sort –nr|head -20 打印中午12點到12點半的前20行的日誌信息訪問ip最多的
sed -i '/^zhang/s/$/ 11/' awk.text 匹配以zhang開頭的這一行並在結尾追加內容 這裏$號表明行結尾
sed -n "$=" /var/log/messages 匹配日誌最後一行的行數(寫監控日誌關鍵字腳本的時候會用到)
awk:
特殊要點:$0 表示整個當前行$1 每行第一個字段$NF 字段數量變量,最後一個$NF-1 字段數量變量,倒數第二個NR 每行的記錄號,多文件記錄遞增FNR 與NR相似,不過多文件記錄不遞增,每一個文件都從1開始\t 製表符\n 換行符FS BEGIN時定義分隔符RS 輸入的記錄分隔符, 默認爲換行符(即文本是按一行一行輸入)~ 匹配,與==相比不是精確比較!~ 不匹配,不精確比較== 等於,必須所有相等,精確比較!= 不等於,精確比較&& 邏輯與|| 邏輯或+ 匹配時表示1個或1個以上/[0-9][0-9]+/ 兩個或兩個以上數字/[0-9][0-9]*/ 一個或一個以上數字FILENAME 文件名OFS 輸出字段分隔符, 默認也是空格,能夠改成製表符等ORS 輸出的記錄分隔符,默認爲換行符,即處理結果也是一行一行輸出到屏幕-F'[:#/]' 定義三個分隔符df -h |awk '{print $1}' 打印第一豎行的數據
df -h |awk '{pring $1,$2}' 打印第二豎行的數據
df -h |awk '{print $1":"$2}' 打印數據的$1,$2之間加個:號
df -h |awk '{print $1"------>"$2}'
ifconfig eth0|grep "Bcast"|awk '{print $2}'|sed 's/addr://g' 取出eth0網卡ip
ifconfig eth0|grep "Bcast"|awk '{print $2}'|awk -F: '{print $2}' 取出eth0網卡ip
ifconfig eth0|grep "Bcast"|awk '{print $2}'|awk -F: '{print $2}'|awk -F. '{print "addr:"$1"."$2"."$3".""0"}'
df -h|awk '/\/$/ {print $0}' 匹配以/爲結尾分區全部內容($ 爲結尾,\ 防止竄意)同grep "\/$"
(1) 取出/分區使用大小
df -h|awk '/\/$/ {print $0}'|sed 's/%//g'|awk '{print $5}'
(2) 監控判斷磁盤大小
df -h|awk '/\/$/ {print $0}'|sed 's/%//g'|awk '{if($5>80)print "ture";else print "fales"}'
df -h|awk '/\/$/ {print $0}'|sed 's/%//g'|awk '{if($5>80){print "ture"}else{print "fales"}}'
(3) 搜索這條數據加起來有多少,再進行判斷
cat tsc-xcall.log|grep "send msd to tmp ok"|awk '{a+=1}END{if(a>10)print "t";else print "f"}'
(4) 統計Nginx服務器總PV量。
awk '{print $7}' access.log |wc -l
(5) 統計Nginx服務器UV統計。
awk '{print $11}' access.log |sort -r|uniq -c |wc -l
(6) 打印這段時間內有多少條200的數據記錄
cat /usr/local/nginx/logs/access.log|sed -n "/2016:09:00:00/,/2016:10:00:00/"p|grep "200"|awk '{print $10}'|awk '{sum += $1} END {print sum}'
cat /usr/local/nginx/logs/access.log|sed -n "/2016:09:00:00/,/2016:10:00:00/"p|awk '{print $NF}' |sed 's/"/" /'g|awk '{print $2}'|sed 's/"/ "/'g|awk '{if ($1>3)print $1}'|wc -lawk '/2017:09:00/,/2017:12:00/' access.log|wc –l
(7) 分析截止目前爲止訪問量最高的IP排行而且訪問量超過100的ip。
awk '{print $1}' /usr/local/nginx/logs/access.log|sort |uniq -c |sort -nr |awk ‘{if($1>=100) print $0}’|head -10
(8) 分析前十分鐘的日誌
sed -n "/`(date -d "-10min" +%Y:%T)`/,/`(date +%Y:%T)`/p" /usr/local/nginx/logs/access.log
access.log|awk ‘{print $1,$7}’|sort|uniq –c |sort –nr
(9) 查找訪問請求超過0.5秒的url
awk ‘{if ($NF>0.5) print $1,$7,$NF}’ access.log|more
(10) 找到當前日誌中502或者404錯誤的頁面並統計。
awk‘{if(($9=502)||($9=404)) print $1,$7,$9 }’ /usr/local/nginx/logs/access.log|sort|uniq –c|sort -nr
(11) 分析Nginx訪問日誌狀態碼40四、50二、50三、500、499等錯誤信息頁面,打印錯誤出現次數大於20的IP地址。
awk‘{if($9~/502|499|500|503|404/) print $1,$7,$9 }’/usr/local/nginx/logs/access.log|sort|uniq –c|sort -nr |awk '{if($1>20) print $2}'
(12) 找到當前日誌中502或者404錯誤的頁面並統計。
awk '{print $0}' /usr/local/nginx/logs/access.log|egrep "404|502"|awk '{print $1,$7,$9}'|more
(13) 統計netstat -anp 狀態爲CONNECT的鏈接數量是多少
netstat -anlp|grep java|awk '/^tcp/ && /ESTABLISHED/{t++}END{print t}')
cut:
-d 以什麼爲分隔符
-f 打印
cat /etc/passwd | cut -d : -f 1 #以:分割,取第一段
a=daemon:x:2:2:daemon:/sbin:/sbin/nologin echo $a | cut -d: -f 1 daemon