Linux三劍客-grep || awk || sed


grep是一個強大的文本搜索工具

  命令格式: grep [option] pattren file

  -a  將二進制文檔以文本方式處理

  -c  計算找到的符合行的次數

  -i  忽略大小寫

  -n  順便輸出行號

  -v  反向選擇,即顯示不包含匹配文本的所有行  

  -h  查詢多文件時只輸出包含匹配字符的文件名

  -f  指定規則文件,其內容含有一個或多個規則樣式

  grep正則表達式;

  • grep正則表達式元字符集(基本集) 
  • ^ 錨定行的開始 如:'^grep'匹配所有以grep開頭的行。 
  • $ 錨定行的結束 如:'grep$'匹配所有以grep結尾的行。 
  • . 匹配一個非換行符的字符 如:'gr.p'匹配gr后接一個任意字符,然后是p。 
  • * 匹配零個或多個先前字符 如:'*grep'匹配所有一個或多個空格后緊跟grep的行。 
  • .*一起用代表任意字符。 
  • [] 匹配一個指定范圍內的字符,如'[Gg]rep'匹配Grep和grep。 
  • [^] 匹配一個不在指定范圍內的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。 
  • /(../) 標記匹配字符,如'/(love/)',love被標記為1。 
  • /< 錨定單詞的開始,
  • /> 錨定單詞的結束,如'grep/>'匹配包含以grep結尾的單詞的行。 
  • x/{m/} 重復字符x,m次,如:'o/{5/}'匹配包含5個o的行。 x/{m,/} 重復字符x,至少m次,如:'o/{5,/}'匹配至少有5個o的行。 
  • x/{m,n/} 重復字符x,至少m次,不多於n次,如:'o/{5,10/}'匹配5--10個o的行。 
  • /w 匹配文字和數字字符,也就是[A-Za-z0-9_],如:'G/w*p'匹配以G后跟零個或多個文字或數字字符,然后是p。 
  • /W /w的反置形式,匹配一個或多個非單詞字符,如點號句號等。 
  • /b 單詞鎖定符,如: '/bgrep/b'只匹配grep

awk 適合文本處理和報表生成

  命令格式:awk '{pattern + action}' {filenames}

  如下:-F 以空格或“,”作為分隔條件  展示第3和第7項內容

# cat test.txt
I am Poe,my qq is 33794712

# awk -F '[ ,]+' '{print $3" "$7}' test.txt
Poe 33794712

如下:以空格為分隔,其中count為總行數, size為第三項的總和

 ps -ef | awk -F [" "]+ '{count++; size=size+$3} END{print "count = ", count, "size = ", size}'
count =  147 size =  1704836

  FS    輸入字段分隔符 默認是空格 

$ ps -ef | awk 'BEGIN{FS=" "}{count++; size=size+$3} END{print "count = ", count, "size = ", size}'
count =  149 size =  1763619

  RS    輸入記錄分隔符 默認為換行符

  NF    當前記錄中的字段個數,就是有多少列  

$ ifconfig eth0 | awk -F [" "]+ '{print "Nf = ", NF}'
Nf =  4
Nf =  7
Nf =  6
Nf =  8
Nf =  10
Nf =  8
Nf =  12
Nf =  0

$ ps -ef | awk -F [" "]+ 'NF==12{print $0}'
root         1     0  0  2018 ?        00:01:48 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

  NR    已經讀出的記錄數,就是行號,從1開始   

$ ifconfig eth0 | awk -F [" "]+ 'NR==2{print $0}'
        inet 172.19.147.8  netmask 255.255.240.0  broadcast 172.19.159.255

 

sed:主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。

  

  

命令 說明
d 刪除,刪除選擇的行
D 刪除模板塊的第一行
s 替換指定字符
h 拷貝模板塊的內容到內存中的緩沖區
H 追加模板塊的內容到內存中的緩沖區
g 獲得內存緩沖區的內容,並替代當前模板塊中文本
G 獲得內存緩沖區的內容,並追加到當前模板塊文本的后面
l 列表不能打印字符的清單
n 讀取下一個輸入行,用下一個命令處理新的行而不是第一個命令
N 追加下一個輸入行到模板塊后面並在二者間嵌入一個新行,改變當前行號碼
p 打印模板塊的行
P 打印模板塊的第一行
q 退出sed
b label 分支到腳本中帶有標記的地方,如果分支不存在則分支到腳本的末尾
r file 從file中讀行
t label if分支,從最后一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾
T label 錯誤分支,從最后一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾
w file 寫並追加模板塊到file末尾
W file 寫並追加模板塊的第一行到file末尾
! 表示后面的命令對所有沒有被選定的行發生作用
= 打印當前行號
# 把注釋擴展到第一個換行符以前

 

命令 說明
g 表示行內全面替換
p 表示打印行
w 表示把行寫入一個文件
x 表示互換模板塊中的文本和緩沖區中的文本
y 表示把一個字符翻譯為另外的字符(但是不用於正則表達式)
\1 子串匹配標記
& 已匹配字符串標記

 

 

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com