sed及awk部分為本人學習筆記,呵呵,自己寫的哦
sed命令:
格式:sed -e 's/aaa/bbb/g' -n -e '/XXX/p' -e '/YYY/d' filename
命令參數:
-e 執行多個SED命令
s替換
g全文
-n顯示過濾後的部分,否則會重復顯示一次原文
p顯示出來print
d刪除
\把元字符轉化($,\.,\^,\/)
正則表格式:
/^$/ 空行
/^.*/ 一整行
/*/ 一個或多個空格
/[a-zA-Z][a-zA-Z]*:W[a-zA-Z0-9][a-zA-Z0-9\.]*.*/ 有效的URL
例:
$cat tt
aaa XXX
aaa YYY
bbb XXX
bbb YYY
$sed -e 's/aaa/bbb/g' -n -e '/XXX/p' -e '/YYY/d' tt
bbb XXX
bbb XXX
hos08:/u1/hos08/tmp>
注解:把aaa替換成bbb,過濾包含XXX的行,刪除包含YYY的行。
awk (一)
< 小於
> 大於
<= 小於等於
>= 大於等於
== 等於
!= 不等於
value~/pattern/ 如果value匹配樣式,為真
value!~/pattern/ 如果value不匹配樣式,為真
&& A與B
|| A或B
使用 printf語句中參數可以使段落整齊。$cat tt
aaa XXX 100 5
aaa YYY 98 9
bbb XXX 111 3
bbb YYY 99 8過濾包含aaa的行並以,"TTT",格式顯示出來
$awk ' /aaa/ {print ,"TTT",;} ' tt
XXX TTT aaa
YYY TTT aaa
過濾第三列為2位數字,並且第四列大於5的行
$awk ' ( ~ /[0-9][0-9]/ ) && ( > 5 ) { print ,,, ;}' tt
aaa YYY 98 9
bbb YYY 99 8把所列行後邊加*號
$awk ' ( ~ /[0-9][0-9]/ ) && ( > 5 ) { printf "%s\t%s\n" ,,"*";}' tt
aaa YYY 98 9 *
bbb YYY 99 8 *把第一列替換成nnn並在結尾加TTT,再把第一列替換成uuu直接顯示。
$awk ' = "nnn" { printf "%s\t%s\n" , , "TTT" ; } = "uuu" { print ; } ' tt
nnn XXX 100 5 TTT
uuu XXX 100 5
nnn YYY 98 9 TTT
uuu YYY 98 9
nnn XXX 111 3 TTT
uuu XXX 111 3
nnn YYY 99 8 TTT
uuu YYY 99 8針對上一行加入了next,其功能是如果第一段命令為真則跳過以後段直接重新開始檢查
$awk ' = "nnn" { printf "%s\t%s\n" , , "TTT" ;next; } = "uuu" { print ; } ' tt
nnn XXX 100 5 TTT
nnn YYY 98 9 TTT
nnn XXX 111 3 TTT
nnn YYY 99 8 TTT把第三列大於等於100的行加TTT,再把第四列大於等於5的行連同上一查詢結果一同列出來。
$awk ' >= 100 { printf "%s\t%s\n" ,,"TTT" ; } >= 5 { print ; } ' tt
aaa XXX 100 5 TTT
aaa XXX 100 5
aaa YYY 98 9
bbb XXX 111 3 TTT
bbb YYY 99 8把第三列大於等於100的行加TTT,再把小於100的行連同上一查詢一同列出來。
$awk ' >= 100 { printf "%s\t%s\n" ,,"TTT" ; } < 100 { print ; }