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開啟方法
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}'
echo $PATH | awk 'BEGIN{FS=":";OFS=" | "}{$1=$1;print $0}'
echo $PATH | awk 'BEGIN{RS=":";ORS="^"}{print $0}'
awk行處理
echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
echo $PATH | awk 'BEGIN{RS=":"}{print NR,$0}'
echo $PATH | awk 'BEGIN{RS=":"}END{print NR}'
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{ORS=":"}{print $0}'
數(shù)據(jù)計(jì)算
echo '1,10
2,20
3,30' | awk 'BEGIN{a=0;FS=","}{a+=$2}END{print a/NR}'
awk的詞典結(jié)構(gòu)
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ì)分析