awk 6.0 — awk模式之二
awk的語法
awk [options] ‘Pattern {Actions}’ file1,file2…
之前介紹了三種模式:空模式,關系運算模式,BEGIN/END模式
正則模式
模式可以理解成條件,正則模式就是滿足正則表達式條件的,就執行相應的動作,否則不執行。
如果我們想要找到在/etc/passwd文件中,以“_krb”開頭的內容該如何找呢
grep "^_krb" /etc/passwd
同樣的,我們想要使用awk的方式完成這個操作,
awk '/^_krb/{print $0}' /etc/passwd
比較一下上面兩種方式,grep將正則表達式放在了雙引號中,awk將正則表達式放在了兩個反斜杠中。
上面示例看上去是grep更加的簡介,但是有一些具體的case的時候,awk顯得更加美觀。awk有格式化輸出的功能。請讀者嘗試著讀下面的使用方式:
注意點:1. 如果在awk的正則中使用了/,這個時候就需要使用轉義字符,假如下面的需求,我們想要從passwd文件中,找到/bin/bash作為登陸shell的用戶,
awk '\/bin\/bash$/{print $0} /etc/passwd'
注意點:2. 如果在正則中,需要使用形如{x,y}這種類型的表達式的時候,需要使用–posix,或者–re-interval選項
awk --posix '/he{2,3}y/{print $0} test'
行范圍模式
假如有下面的文件(為了截圖方便,我把文件和操作放在一起了)
文件中,hello出現了兩次,world出現了一次,如果我想篩選出,hello第一次出現和world第一次出現中的所有行的內容,就使用上面的方式
總結一下就是,使用兩個正則表達式,匹配所有的行,意思就是從第一個正則開始,到第二個正則結束匹配所有的行。
行范圍模式另外一種方式,可以使用關系運算模式進行解決,比如打印3-6行的數據。
awk 'NR>=3 && NR<=6 {print $0}' test
總結
以上是生活随笔為你收集整理的awk 6.0 — awk模式之二的全部內容,希望文章能夠幫你解決所遇到的問題。