Linux三劍客指的是grep、sed、awk,配合正則表達式使用就很是強大,我感受會使用普通的場景就足夠工做中適用了,其中grep擅長查找功能,sed擅長取行和替換。awk擅長取列,筆者分別針對這些功能列舉語法以及實際案例。新手入門,若有問題,歡迎指正 ~ java
最開始,先介紹一下管道的概念,| 這個豎線就是管道的意思,後文中會持續用到該符號,做用就是將前一個命令的輸入輸送給 | 後面的命令,能夠進行多重管道,例如:nginx
1、grep正則表達式
grep做用是篩選,查詢express
1. 語法規則
編程
Usage: grep [選項]... 匹配項 [文件]...tomcat
支持的正則 描述服務器
-E,--extended-regexp 模式是擴展正則表達式(ERE)編程語言
-e,--regexp=PATTERN 使用模式匹配,可指定多個模式匹工具
-f,--file=FILE 從文件每一行獲取匹配模式字體
-i,--ignore-case 忽略大小寫
-w,--word-regexp 模式匹配整個單詞
-x,--line-regexp 模式匹配整行
輸出控制 描述
-m,--max-count=NUM 輸出匹配的結果 num 數
-n,--line-number 打印行號
-H,--with-filename 打印每一個匹配的文件名
-h,--no-filename 不輸出文件名
-o,--only-matching 只打印匹配的內容
-q,--quiet 不輸出正常信息
-s, --no-messages 不輸出錯誤信息
-r,--recursive 遞歸目錄
-c,--count 只打印每一個文件匹配的行數
--include=FILE_PATTERN 只檢索匹配的文件
--exclude=FILE_PATTERN 跳過匹配的文件
--exclude-from=FILE 跳過匹配的文件,來自文件模式
--exclude-dir=PATTERN 跳過匹配的目錄
-v,--invert-match 打印不匹配的行
內容行控制 描述
-B,--before-context=NUM 打印匹配的前幾行
-A,--after-context=NUM 打印匹配的後幾行
-C,--context=NUM 打印匹配的先後幾行
--color[=WHEN], 匹配的字體顏色
2. 案例
# 很經常使用的使用 grep 篩選 目前服務器 使用的java tomcat nginx進程
# 查詢日誌關鍵詞 -e 達標多個條件
# 輸出查詢內容後5行的日誌
# 經過正則來篩選結果
# 查詢以 ACTIVITY 開頭的日誌
# 查詢全部出現的時間
# 查詢出全部符合條件的IP地址
2、sed
sed做用是過濾和替換文本。
1. 語法規則
sed [選項] '地址 命令' file
選項 描述
-n 不打印模式空間
-e 執行腳本、表達式來處理
-f 執行動做從文件讀取執行
-i 修改原文件
-r 使用擴展正則表達式
地址 描述
first~step 步長,每 step 行,從第 first 開始
$ 匹配最後一行
/regexp/ 正則表達式匹配行
number 只匹配指定行
addr1,addr2 開始匹配 addr1 行開始,直接 addr2 行結束
addr1,+N 從 addr1 行開始,向後的 N 行
addr1,~N 從 addr1 行開始,到 N 行結束
命令 描述
s/要替換的內容/替換成的內容/ 替換字符串
p 打印當前模式空間
P 打印模式空間的第一行
d 刪除模式空間,開始下一個循環
D 刪除模式空間的第一行,開始下一個循環
= 打印當前行號
2. 案例
# 替換輸入內容(其中不以g結尾是替換每行中的第一個"11",不然就是替換全部的"11")
# 替換文件內容並覆蓋(-i 參數 表明替換文件內容)
3、awk
awk是一個處理文本的編程語言工具,能用簡短的程序處理標準輸入或文件、數據排序、計算以及生成報表等等。
1. 語法規則
基本的命令語法:awk option 'pattern {action}' file
其中 pattern 表示 AWK 在數據中查找的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號用於根據特定的模式對一系列指令進行分組。
選項 描述
-f program-file 從文件中讀取 awk 程序源文件
-F fs 指定 fs 爲輸入字段分隔符
-v var=value 變量賦值
pattern (匹配模式)
/regular expression/ 爲每一個輸入記錄匹配正則表達式
pattern && pattern 邏輯 and,知足兩個模式
pattern || pattern 邏輯 or,知足其中一個模式
! pattern 邏輯 not,不知足模式
BEGIN{ } 給程序賦予初始狀態,先執行的工做
END{ } 程序結束以後執行的一些掃尾工做
2. 案例
# 輸出指定列
# 指定分隔符
# BEGIN END的使用(能夠用做格式化輸出,也能夠在其中作一些初始化,以及收尾的工做)
# 格式化輸入
# 初始化分隔符和換行符,最後列數與記錄數
其中: FS 輸入字段分隔符,默認是空格或製表符
RS 輸入記錄分隔符,默認是換行符\n
NF 統計當前記錄中字段個數
NR 統計記錄編號,每處理一行記錄,編號就會+1
# 使用正則的場景(篩選出符合條件的列,按照默認空格切分後,輸出第三列)
寫在文末:列舉了這麼多,實際都是想象中的用法,實際工做中我目前只用到了 grep的簡單場景,若有啥問題,請多包涵【狗頭】