WEB开发网
开发学院数据库MySQL awk和sed整理后资料 阅读

awk和sed整理后资料

 2007-11-11 15:30:02 来源:WEB开发网   
核心提示:sed及awk部分为本人学习笔记,呵呵,awk和sed整理后资料,自己写的哦sed命令:格式:sed -e 's/aaa/bbb/g' -n -e '/XXX/p' -e '/YYY/d' filename命令参数:-e 执行多个SED命令s替换g全文-n显示过滤后的部分

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
 

Tags:awk sed 整理

编辑录入:coldstar [复制链接] [打 印]
赞助商链接