Linux三劍客介紹
- grep
- global search regular expression(RE) and print out the line
- 基于正則表達式查找滿足條件的行
- awk
- 名字來源于三個作者的名字簡稱
- 根據(jù)定位到的數(shù)據(jù)行處理其中的分段
- sed
- stream editor
- 根據(jù)定位到的數(shù)據(jù)行修改數(shù)據(jù)
Linux三劍客的價值
- 三劍客
- grep 數(shù)據(jù)查找定位
- awk 數(shù)據(jù)切片
- sed 數(shù)據(jù)修改
- 類比SQL
grep= select * from table like '%xx'awk=select field from tablesed=update table set field=new where field=old
grep
grep pattern file-
grep -i pattern file忽略大小寫 -
grep -v pattern file不顯示匹配的行 -
grep -o pattern file把每個匹配的內(nèi)容用獨立的行顯示 -
grep -E pattern file使用擴展正則表達式 -
grep -A -B -C pattern file打印命中數(shù)據(jù)的上下文 -
grep pattern -r dir/遞歸搜索
BRE基本正則表達式
-
^開頭$結(jié)尾 -
[a-z] [0-9]區(qū)間,如果開頭帶有^表示不能匹配區(qū)間內(nèi)的元素 -
*0個或多個 -
.表示任意字符
ERE擴展正則表達式
- 基本正則表達式(BRE)基礎(chǔ)上的擴展
-
?非貪婪匹配 -
+一個或者多個 -
()分組 -
{}范圍約束 -
|匹配多個表達式的任何一個
ERE開啟方法

image.png
awk
- 介紹
- Awk是linux下的一個命令,同時也是一種語言解析引擎
- Awk具備完整的編程特性。比如執(zhí)行命令,網(wǎng)絡(luò)請求等
- 精通awk,是一個linux工作者的必備技能語法
awk 'pattern{action}'
awk pattern語法
- 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代表第一個字段 -
$N代表第N個字段 -
$NF代表最后一個字段 -
$(NF-1)代表倒數(shù)第二個字段
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重新計算
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ù)計算
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表達式 -
sed -n '2p'打印第二行 -
sed 's#hello#world#'修改 -
-i直接修改源文件 -
-E擴展表達式 -
--debug調(diào)試
pattern
- 20 30,35行數(shù)與行數(shù)范圍
-
/pattern/正則匹配 -
//,//正則匹配的區(qū)間,第一個表示開始命中,第二個表示結(jié)束命中,類似開閘放水
act1011
-
d刪除 -
p打印,通暢結(jié)合-n參數(shù):sed -n '2p' - 查找替換::
s/REGEXP/REPLACEMENT/[FLAGS] - 分組匹配與字段提?。?code>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 "
三劍客實戰(zhàn)
- 日志數(shù)據(jù)檢索
- 找出log中的404 500的報錯考察嚴(yán)謹(jǐn)性
- 找出500錯誤時候的上下文考察grep高級用法
-日志數(shù)據(jù)統(tǒng)計 - 找出訪問量最高的ip統(tǒng)計分析
- 數(shù)據(jù)文件修改
- 找出訪問量最高的頁面地址借助于sed的統(tǒng)計分析