Linux三劍客 grep+awk+sed

Linux三劍客介紹

  • grep
    • global search regular expression(RE) and print out the line
    • 基于正則表達(dá)式查找滿足條件的行
  • awk
    • 名字來(lái)源于三個(gè)作者的名字簡(jiǎn)稱
    • 根據(jù)定位到的數(shù)據(jù)行處理其中的分段
  • sed
    • stream editor
    • 根據(jù)定位到的數(shù)據(jù)行修改數(shù)據(jù)

Linux三劍客的價(jià)值

  • 三劍客
    • grep 數(shù)據(jù)查找定位
    • awk 數(shù)據(jù)切片
    • sed 數(shù)據(jù)修改
  • 類比SQL
    • grep= select * from table like '%xx'
    • awk=select field from table
    • sed=update table set field=new where field=old

grep

  • grep pattern file
  • grep -i pattern file 忽略大小寫
  • grep -v pattern file 不顯示匹配的行
  • grep -o pattern file 把每個(gè)匹配的內(nèi)容用獨(dú)立的行顯示
  • grep -E pattern file 使用擴(kuò)展正則表達(dá)式
  • grep -A -B -C pattern file 打印命中數(shù)據(jù)的上下文
  • grep pattern -r dir/ 遞歸搜索

BRE基本正則表達(dá)式

  • ^ 開頭 $ 結(jié)尾
  • [a-z] [0-9] 區(qū)間榄审,如果開頭帶有^表示不能匹配區(qū)間內(nèi)的元素
  • * 0個(gè)或多個(gè)
  • . 表示任意字符

ERE擴(kuò)展正則表達(dá)式

  • 基本正則表達(dá)式(BRE)基礎(chǔ)上的擴(kuò)展
  • ? 非貪婪匹配
  • + 一個(gè)或者多個(gè)
  • () 分組
  • {} 范圍約束
  • | 匹配多個(gè)表達(dá)式的任何一個(gè)

ERE開啟方法

image.png

awk

  • 介紹
    • Awk是linux下的一個(gè)命令强法,同時(shí)也是一種語(yǔ)言解析引擎
    • Awk具備完整的編程特性泰演。比如執(zhí)行命令,網(wǎng)絡(luò)請(qǐng)求等
    • 精通awk乖阵,是一個(gè)linux工作者的必備技能語(yǔ)法
  • awk 'pattern{action}'

awk pattern語(yǔ)法

  • awk理論上可以代替grep
  • awk 'pattern{action}'
  • awk 'BEGIN{}END{}' 開始和結(jié)束
  • awk '/Running/' 正則匹配
  • awk '/aa/,/bb/' 區(qū)間選擇
  • awk '$2~/xxx/' 字段匹配
  • awk 'NR==2' 取第二行
  • awk 'NR>1' 去掉第一行

awk內(nèi)置變量

  • FS字段分隔符
  • OFS輸出數(shù)據(jù)的字段分隔符
  • RS記錄分隔符
  • ORS輸出字段的行分隔符
  • NF字段數(shù)
  • NR記錄數(shù)

awk的字段數(shù)據(jù)處理

  • -F 參數(shù)指定字段分隔符
  • BEGIN{FS="_"} 也可以表示分隔符
  • $0 代表當(dāng)前的記錄
  • $1代表第一個(gè)字段
  • $N 代表第N個(gè)字段
  • $NF代表最后一個(gè)字段
  • $(NF-1) 代表倒數(shù)第二個(gè)字段

awk字段分割

echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk -F/ '{print $1,$2,$3,$4}'
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{FS="/"}{print $1,$2,$3,$4}'
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{FS="/ | -"}{print $1,$2,$3,$4}'
image.png
  • 修改OFS和ORS讓$0重新計(jì)算
echo $PATH | awk 'BEGIN{FS=":";OFS=" | "}{$1=$1;print $0}'
echo $PATH | awk 'BEGIN{RS=":";ORS="^"}{print $0}'
image.png

awk行處理

  • 把單行分拆為多行
echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
echo $PATH | awk 'BEGIN{RS=":"}{print NR,$0}'
echo $PATH | awk 'BEGIN{RS=":"}END{print NR}'
image.png
  • 多行組合為單行
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{ORS=":"}{print $0}'
image.png

數(shù)據(jù)計(jì)算

echo '1,10
2,20
3,30' | awk 'BEGIN{a=0;FS=","}{a+=$2}END{print a/NR}'
image.png

awk的詞典結(jié)構(gòu)

  • 提取包含”9”但是并不包含”study”的記錄
awk -F, '
/9/{if(member[$1]!=1) d[$1]=$0}
/study/{member[$1 ]=1; delete d[$1]}
END{for(k in d) print d[k]}
'file

sed

  • sed [addr ]X[options]
  • -e 表達(dá)式
  • sed -n '2p' 打印第二行
  • sed 's#hello#world#' 修改
  • -i 直接修改源文件
  • -E 擴(kuò)展表達(dá)式
  • --debug 調(diào)試

pattern

  • 20 30,35行數(shù)與行數(shù)范圍
  • /pattern/ 正則匹配
  • //,// 正則匹配的區(qū)間,第一個(gè)表示開始命中,第二個(gè)表示結(jié)束命中坯约,類似開閘放水

act1011

  • d刪除
  • p打印,通暢結(jié)合-n參數(shù):sed -n '2p'
  • 查找替換::s/REGEXP/REPLACEMENT/[FLAGS]
  • 分組匹配與字段提饶肌:sed 's#([0-9]*)|([a-z]*)#\1\2#'

sed使用

echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | sed 's#/#----#g'
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | sed -n '/^\ /bin/,/sbin/p'
sed -i '.bak' -e " -e "

三劍客實(shí)戰(zhàn)

  • 日志數(shù)據(jù)檢索
    • 找出log中的404 500的報(bào)錯(cuò)考察嚴(yán)謹(jǐn)性
    • 找出500錯(cuò)誤時(shí)候的上下文考察grep高級(jí)用法
      -日志數(shù)據(jù)統(tǒng)計(jì)
    • 找出訪問(wèn)量最高的ip統(tǒng)計(jì)分析
  • 數(shù)據(jù)文件修改
    • 找出訪問(wèn)量最高的頁(yè)面地址借助于sed的統(tǒng)計(jì)分析
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闹丐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子被因,更是在濱河造成了極大的恐慌卿拴,老刑警劉巖衫仑,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堕花,居然都是意外死亡文狱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門缘挽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瞄崇,“玉大人,你說(shuō)我怎么就攤上這事壕曼∷昭校” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵窝稿,是天一觀的道長(zhǎng)楣富。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伴榔,這世上最難降的妖魔是什么纹蝴? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮踪少,結(jié)果婚禮上塘安,老公的妹妹穿的比我還像新娘。我一直安慰自己援奢,他們只是感情好兼犯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著集漾,像睡著了一般切黔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上具篇,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天纬霞,我揣著相機(jī)與錄音,去河邊找鬼驱显。 笑死诗芜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的埃疫。 我是一名探鬼主播伏恐,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼栓霜!你這毒婦竟也來(lái)了翠桦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胳蛮,失蹤者是張志新(化名)和其女友劉穎秤掌,沒(méi)想到半個(gè)月后愁铺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闻鉴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茂洒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孟岛。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖督勺,靈堂內(nèi)的尸體忽然破棺而出渠羞,到底是詐尸還是另有隱情,我是刑警寧澤智哀,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布次询,位于F島的核電站,受9級(jí)特大地震影響瓷叫,放射性物質(zhì)發(fā)生泄漏屯吊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一摹菠、第九天 我趴在偏房一處隱蔽的房頂上張望盒卸。 院中可真熱鬧,春花似錦次氨、人聲如沸蔽介。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)虹蓄。三九已至,卻和暖如春幸撕,著一層夾襖步出監(jiān)牢的瞬間薇组,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工杈帐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留体箕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓挑童,卻偏偏與公主長(zhǎng)得像累铅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子站叼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容