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删除 \把元字符转化(


    


    


    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 ; } ' tt


    aaa XXX 100 5  TTT


    aaa YYY 98 9


    bbb XXX 111 3  TTT


    bbb YYY 99 8


    搭配其他命令来使用。


    $w


    3:16pm up 4 days, 8:34, 30 users, load average: 0.97, 0.78, 0.80


    USER    TTY     FROM             LOGIN@  IDLE  JCPU  PCPU WHAT


    usr0809 pts/1   172.26.4.52      2:31pm 23:52  0.54s 0.00s -bash


    usr0809 pts/2   172.26.4.49     12:53pm 0.00s 10.68s 0.03s -bash


    u0809   pts/3   172.26.4.56      7:39am 28:29  7.59s 0.01s -bash


    u0809   pts/4   172.26.4.51      2:20pm 55:45  0.12s 0.02s -bash


    过滤包含pts的行,并显示它的第三和第一列


    $w |awk ' = /pts/ {printf "%s\t%s\n",,;}'


    172.26.4.52    user1


    172.26.4.49    user2


    172.26.4.56    user3


    172.26.4.51    user4




    原文转自:http://51CTO提醒您,请勿滥发广告!