正則文本處理

文本處理經常使用命令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"選項隱含該選項,測試發現都隱含)
-c:檢查文件是否已經按照順序排序,如未排序,會提示從哪一行開始亂序
-C:相似於"-c",只不過不輸出任何診斷信息。能夠經過退出狀態碼1判斷出文件未排序
-d:只處理英文字母、數字及空格,忽略其餘的字符
-f:將小寫字母視爲大寫字母
-h:使用易讀性數字(例如:2K、1G)
-i:除了040至176之間的ASCII字符外(八進制0-177),忽略其餘的字符(忽略沒法打印的字符如退格/換頁鍵/回車)
-k:以哪一個區間 (field) 來進行排序
-m:將幾個排序好的文件進行合併,只是單純合併,不作排序
-M:將前面3個字母依照月份的縮寫進行排序
-n:依照數值的大小排序
-o<輸出文件>:將排序後的結果存入指定的文件
-r:降序
-u:忽略相同行
-t<分隔字符>:指定分隔符,默認的分隔符爲空白字符和非空白字符之間的空字符

 

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 -l

awk  '/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
相關文章
相關標籤/搜索